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は用いない等)でも構いません、
上記のように入力した値を計算処理の後描画させる方法があれば教えていただけませんでしょうか。
詳しい方には初歩的すぎて恐縮なのですがどうぞよろしくお願いします。
No.3ベストアンサー
- 回答日時:
> それではピンポイントに1つだけ質問させてください、
Viewに描画することは、UIViewサブクラスの「drawRect」メソッド以外では行えません。※注
(Mac OS X Cocoaフレームワークなら、メソッド「lockFocus」~「unlockFocus」を使って、それ以外の場所でも描画できるのですが、iOSのフレームワークでは使えません)
なので、描画以外の処理も、UIViewサブクラス上でやっちゃうのが、かんたんという、No.1の回答につながるわけです。
※CALayer(Core Animation Layer)のDelegateとして、「drawLayer:inContext:」というメソッドを使って、描画する方法が、ないわけではない。
No.2
- 回答日時:
> 簡単に説明していただけると幸いです。
かんたんな説明では、おそらくあなたは理解できないでしょう。ここであなたが書いた文章を読む限りで判断すれば、あなたはここで質問できるレベルまで、達していません。
なんらかの入門書をもとに勉強なさっているのでしょうから、もういちどその書籍を最初から読み直して、いちから勉強してください。
あなたが求めようとしているのは、入門講座をあなたひとりのために開いてくださいということであって、さすがにギャラなしでそれに応じることはできません。金にならないことに、時間を割くことはできませんからね。
ちゃんと質問をピンポイントに絞ってくれなければ、お相手することはできません。
この回答への補足
勉強不足で申し訳ありません、、
それではピンポイントに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へ値を渡すための処理(~という文を使って値を公開、~という文で取得 だけで構いません)があればをおしえていただけないでしょうか
No.1
- 回答日時:
わかりにくければ、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ファイルが含まれていないため利用者が数値を入力できるようにするためにどのようにプログラムを組めばよいかがわかりません。簡単に説明していただけると幸いです。
質問が増えてしまって申し訳ないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- 電気工事士 6.6kVケーブル単芯325sq-1.5kmの遮蔽銅テープ抵抗値は何Ω? 1 2023/05/02 21:06
- マンガ・コミック 漫画の練習方について 1 2022/06/06 19:26
- マンガ・コミック 同人誌を描く時の原稿サイズについて 閲覧ありがとうございます。 同人誌を作りたいと思っているのですが 1 2022/12/30 23:38
- Excel(エクセル) エクセルで値ではなく関数を参照する方法 6 2023/03/19 00:50
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- Excel(エクセル) エクセル 条件に合う日付に入力された時間数の合計したい 4 2022/06/17 22:18
- CAD・DTP 「機能ブロック図」の描画用フリーソフトを教えてください 1 2022/09/23 16:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# DataGridView のCellPaintin...
-
Canvas等の図形を移動する時,直...
-
C# リストビューの特定のセルの...
-
javascriptのライブラリーで、...
-
JAVAでの背景画像表示
-
pngファイルを表示したい
-
複数画像表示切り替え Visual c++
-
ドラッグして矩形を描くには
-
描画してもウィンドウをリサイ...
-
C#のGraphicsクラスについてです。
-
株価チャートソフトを作るのに
-
VBの課題の提出でわからないと...
-
重なった要素上でのイベントで...
-
AWTでテキストボックスの枠線を...
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
Java初級 引数に適用できません
-
mainメソッドのthrows節で設定...
-
private static という変数の修飾
-
クラス間でのデータ参照
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NET フォーム上に描いたグ...
-
VB.NETのSendMessageを教えてく...
-
JAVAでの背景画像表示
-
C# DataGridView のCellPaintin...
-
重なった要素上でのイベントで...
-
C# リストビューの特定のセルの...
-
Androidで画像の中で指定した範...
-
画面のちらつきの原因が知りた...
-
複数画像表示切り替え Visual c++
-
Labelコントロールの背景をグラ...
-
VS Treeview のデザイン変更
-
描画処理が実行されない
-
GDI+で描画した画像を消去する...
-
このプログラミングをどう組み...
-
canvasで表示されてる画像を1...
-
ドラッグして矩形を描くには
-
getGraphics()の意味を教えて...
-
Canvas等の図形を移動する時,直...
-
DirectXのスプライト機能で3D回転
-
Exception occurred during eve...
おすすめ情報