- ベストアンサー
iPhoneアプリ開発のカスタムUIViewでの値計算と描画方法について
- iPhoneアプリ開発初心者の質問です。XcodeのカスタムUIviewについて理解ができず苦しんでいます。利用者が値を入力し、計算結果に基づいて線を描画する方法を教えてください。
- iPhoneアプリ開発初心者の質問です。XcodeのカスタムUIviewについて理解ができず苦しんでいます。利用者の入力に基づいて値を計算し、それに応じた線を描画する方法を教えてください。
- iPhoneアプリ開発初心者の質問です。XcodeのカスタムUIviewについて理解ができず苦しんでいます。利用者が入力した値を計算し、計算結果に基づいて線を描画する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> それではピンポイントに1つだけ質問させてください、 Viewに描画することは、UIViewサブクラスの「drawRect」メソッド以外では行えません。※注 (Mac OS X Cocoaフレームワークなら、メソッド「lockFocus」~「unlockFocus」を使って、それ以外の場所でも描画できるのですが、iOSのフレームワークでは使えません) なので、描画以外の処理も、UIViewサブクラス上でやっちゃうのが、かんたんという、No.1の回答につながるわけです。 ※CALayer(Core Animation Layer)のDelegateとして、「drawLayer:inContext:」というメソッドを使って、描画する方法が、ないわけではない。
その他の回答 (2)
- harawo
- ベストアンサー率58% (3742/6450)
> 簡単に説明していただけると幸いです。 かんたんな説明では、おそらくあなたは理解できないでしょう。ここであなたが書いた文章を読む限りで判断すれば、あなたはここで質問できるレベルまで、達していません。 なんらかの入門書をもとに勉強なさっているのでしょうから、もういちどその書籍を最初から読み直して、いちから勉強してください。 あなたが求めようとしているのは、入門講座をあなたひとりのために開いてくださいということであって、さすがにギャラなしでそれに応じることはできません。金にならないことに、時間を割くことはできませんからね。 ちゃんと質問をピンポイントに絞ってくれなければ、お相手することはできません。
- harawo
- ベストアンサー率58% (3742/6450)
わかりにくければ、UIViewControllerをいっさい使わずに、UIView(のサブクラス)でぜんぶまかなってしまえば、わかりやすく、コードも簡潔になるでしょう。 UIViewControllerクラスは、「MVCアーキテクチュア」という概念にのっとって作られたもので、iOS SDKのベースになったMac OS X Cocoaの初期バージョンにはなかったものです。MVCアーキテクチュアを利用すると、データ処理に関するコードを大幅に短縮でき、ほとんどInterface Builderで構築できてしまいます。そのために必要になるのが、名前に「Controller」と付くクラスです。 大規模なデータ処理であれば、MVCアーキテクチュアは威力を発揮しますが、かんたんなデータ処理なら、役不足になります。たとえていうなら、自宅の増改築をするために、スカイツリーで活躍しているクレーンと同規模のものを、レンタルするようなものです。 MVCアーキテクチュアの考え方は、データの読み込み、データの計算、データの書き出しといったデータ処理プログラム(Model)と、計算の結果をViewに描き出すプログラム(View)を切り離すことにより、コードを単純にすることにあります。これらふたつを橋渡しするものとして、コントローラ(Controller)が必要になるのです。 この概念に従うなら、それにいちばん近いのは…… > 【UIviewControllerクラスにて】 > (1)利用者が入力(数字)→(2)計算→(3)出力(数字) > 【カスタムUIviewクラスにて】 > (4)線を描画 です。その手法でプログラムが完成しているのなら、それを採用するのが、iOS SDK全体といちばんなじみ、齟齬をきたさないでしょおう。
補足
> UIViewControllerをいっさい使わずに、UIView(のサブクラス)でぜんぶまかなってしまえば、わかりやすく、コードも簡潔になるでしょう。 ということは,目標とする 「利用者が値を入力(例:5)→簡単な計算(例:5×2=10→計算された長さの線を描画(例:長さ10の線が描画される)」 という流れのプログラムは ii、カスタムUIviewクラス(線を描画するクラス)で(1)~(3)を行う の考え方でつくることが可能ということでしょうか? 現状況の > 【UIviewControllerクラスにて】 > (1)利用者が入力(数字)→(2)計算→(3)出力(数字) > 【カスタムUIviewクラスにて】 > (4)線を描画 では「(2)の計算結果を(4)で描画」ということができていないためプログラムが完成していません。 それと初歩的な質問で申し訳ないのですが、今後、UIViewControllerを使わないUIView(のサブクラス)で作る。ということはX-CODEの新規の追加ファイルでいうところの「UIviewController subclass」ではなく「objective-C class」で作っていく。ということでよろしいのでしょうか? この場合、「objective-C class」にはxibファイルが含まれていないため利用者が数値を入力できるようにするためにどのようにプログラムを組めばよいかがわかりません。簡単に説明していただけると幸いです。 質問が増えてしまって申し訳ないです。
補足
勉強不足で申し訳ありません、、 それではピンポイントに1つだけ質問させてください、 線を描画する場合、新規に追加したUIView subclassのメソッドファイルにおいて - (id)initWithFrame:(CGRect)frame {if (self = [super initWithFrame:frame]) {}return self;} -(void)drawRect:(CGRect)rect{ CGContextRef context=UIGraphicsGetCurrentContext(); CGContextTranslateCTM(context, 0,rect.size.height); CGContextScaleCTM(context, 1.0, -1.0); CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0); CGContextSetLineWidth(context, 1.0); CGContextBeginPath(context); CGContextMoveToPoint(context,0, 200.0); CGContextAddLineToPoint(context, 0, 250.0); ・・・・・ のようにしているのですが、この文はUIViewControllersubclassのメソッドファイルでは使えませんでした。そこで、これと同じような処理がUIViewControllersubclassでも行える文、またはUIViewControllersubclassからUIView subclassへ値を渡すための処理(~という文を使って値を公開、~という文で取得 だけで構いません)があればをおしえていただけないでしょうか