多くの場合、テキストを並べ替えて、組み込みのボタンやラベルなどを利用しています。をサブクラス化する必要はなく、UIView
代わりに を介してプログラムで実行しUIViewController
たり、ストーリーボード/nib ファイルに追加したりできます。ただし、 a をサブクラス化する必要がある場合とその理由の良い例は、UIView
使用しているビューにカスタム タッチ動作または描画を追加する場合です。
したがって、私の見方では、 a をサブクラス化する際の主な考慮事項UIView
は次のようになります。
1) タッチインタラクション、
2) カスタム図面
*単にプログラム構成の観点からビュー サブクラスを作成する理由が他にもあるかもしれないことに注意してください。ただし、動作を別の関数に委任したり、UIView
. たとえば、一般的なアニメーションと背景画像の操作のサポートはすべて、サブクラス化せずに処理できますUIView
。
タッチ インタラクション- とのタッチ インタラクションUIView
は、いくつかの異なる方法で処理できます。タッチ イベントを直接操作するか、ジェスチャ レコグナイザを に追加できUIView
ます。多くの場合、ビューで発生している個々のタッチを調べようとするのではなく、ジェスチャ レコグナイザー (またはカスタム ジェスチャ レコグナイザー) を介して必要なすべてを達成できますが、生のタッチにアクセスしたい/必要な場合次の関数をオーバーライドして、目的の動作を実装します。
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
-(void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
カスタム描画- UIView
Quartz/Core Graphics を介して基本的な 2D 描画を行うことができます。1 つの例は、グラフ作成アプリケーションを実行していてUIView
、スクリードのコンテキスト内で実際の線を描画したい場合です。これを実現するには、drawRect:(CGRect)rect
関数をオーバーライドして、カスタム描画をここにリストします。
そうは言っても、これが線を描く唯一の方法ではなく、カスタム描画を実行しなくてもこのタスクを完了することができます。たとえば、同じ線または線のセットを によってイメージ バッファに描画し、UIViewController
それに応じてビューまたはサブビューの背景として表示できます。ただし、これを行うと、UIView
画面上の線の知識が失われ、その線との直接のタッチ操作がより困難になります。最後に、カスタム描画を表示するためだけにサブクラス化を回避する創造的な方法があることを覚えておいてください。ただし、プログラム設計の観点からは、単にUIView
サブクラスを作成する方が理にかなっている場合があります。
これらは決して a をサブクラス化したい唯一の理由ではありませんがUIView
、 のサブクラスを作成するために使用された 2 つの最大の理由でしUIView
た。詳細については、 UIView クラス リファレンスまたはiOS 用の View プログラミング ガイドを参照することをお勧めします。