プロが教える店舗&オフィスのセキュリティ対策術

iPhoneのアプリケーション開発についての質問です。

最近アプリ開発を始めた初心者です。
XcodeのカスタムUIviewについていまいち理解ができず苦しんでおります。

作りたいのは
利用者が値を入力(例:5)→簡単な計算(例:5×2=10)
→計算された長さの線を描画(例:長さ10の線が描画される)
というモノなんですが

【UIviewControllerクラスにて】
(1)利用者が入力(数字)→(2)計算→(3)出力(数字)
【カスタムUIviewクラスにて】
(4)線を描画

は何とかできるのですが、上記で
i、(2)から(4)へ計算結果を渡し、(2)の長さの線を(4)で描画する
ii、カスタムUIviewクラスで(1)~(3)を行う
iii、controllerクラスで(4)のように線を描画する

の、どれかをすることは可能でしょうか?
また、根本的に違う方法(カスタムUIviewは用いない等)でも構いません、
上記のように入力した値を計算処理の後描画させる方法があれば教えていただけませんでしょうか。

詳しい方には初歩的すぎて恐縮なのですがどうぞよろしくお願いします。

A 回答 (3件)

> それではピンポイントに1つだけ質問させてください、



Viewに描画することは、UIViewサブクラスの「drawRect」メソッド以外では行えません。※注
(Mac OS X Cocoaフレームワークなら、メソッド「lockFocus」~「unlockFocus」を使って、それ以外の場所でも描画できるのですが、iOSのフレームワークでは使えません)
なので、描画以外の処理も、UIViewサブクラス上でやっちゃうのが、かんたんという、No.1の回答につながるわけです。

※CALayer(Core Animation Layer)のDelegateとして、「drawLayer:inContext:」というメソッドを使って、描画する方法が、ないわけではない。
    • good
    • 0

> 簡単に説明していただけると幸いです。



かんたんな説明では、おそらくあなたは理解できないでしょう。ここであなたが書いた文章を読む限りで判断すれば、あなたはここで質問できるレベルまで、達していません。
なんらかの入門書をもとに勉強なさっているのでしょうから、もういちどその書籍を最初から読み直して、いちから勉強してください。

あなたが求めようとしているのは、入門講座をあなたひとりのために開いてくださいということであって、さすがにギャラなしでそれに応じることはできません。金にならないことに、時間を割くことはできませんからね。

ちゃんと質問をピンポイントに絞ってくれなければ、お相手することはできません。

この回答への補足

勉強不足で申し訳ありません、、
それではピンポイントに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へ値を渡すための処理(~という文を使って値を公開、~という文で取得 だけで構いません)があればをおしえていただけないでしょうか

補足日時:2010/12/09 02:33
    • good
    • 0

わかりにくければ、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ファイルが含まれていないため利用者が数値を入力できるようにするためにどのようにプログラムを組めばよいかがわかりません。簡単に説明していただけると幸いです。

質問が増えてしまって申し訳ないです。

補足日時:2010/12/08 19:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!