iOSの場合 UIViewの 'drawRect:' とそのレイヤーのデリゲート 'drawLayer:inContext:' の使い分け。
質問
のサブクラスであるクラスがあります。
UIView
. を実装することによって、ビューの中に描画することができます。
drawRect
メソッドを実装するか、あるいは
drawLayer:inContext:
のデリゲートメソッドである
CALayer
.
2つ質問があります。
- どのアプローチを使うか、どのように決定するのですか?それぞれにユースケースがあるのでしょうか?
-
もし私が
drawLayer:inContext:
と呼ばれ、(かつdrawRect
は呼び出されません。少なくともブレークポイントを置く限りでは)、たとえ私がビューをCALayer
を使用して代表としてビューを割り当てなくても、ブレークポイントを置くことで分かるようになります。[[self layer] setDelegate:self];
私のインスタンスがレイヤーのデリゲートとして定義されていない場合、どうしてデリゲートメソッドが呼び出されるのでしょうか? また、どのようなメカニズムによって
drawRect
が呼び出されるのを防ぐメカニズムは何ですか?drawLayer:inContext:
が呼び出された場合に呼び出されないようにするには?
どのように解決するのですか?
<ブロッククオートどのアプローチを使うか、どのように決定するのですか?それぞれにユースケースがあるのでしょうか?
常に使用する
drawRect:
を使用し、決して
UIView
を描画デリゲートとして使用しないでください。
CALayer
.
私のインスタンスがレイヤーのデリゲートとして定義されていない場合、どうしてデリゲートメソッドが呼び出されるのでしょうか? また、以下の場合に drawRect が呼び出されるのを防ぐメカニズムは何でしょうか?
drawLayer:inContext:
が呼び出されるのを防ぐメカニズムは何ですか?
すべての
UIView
のインスタンスは、そのバックグランドである
CALayer
. そのため
[[self layer] setDelegate:self];
は何もしていないように見えた。冗長なのです。その
drawRect:
メソッドは事実上ビューのレイヤーのための描画デリゲートメソッドです。内部的には
UIView
を実装しています。
drawLayer:inContext:
を実装しており、独自の処理を行った後に
drawRect:
. デバッガで確認することができます。
このため
drawRect:
を実装したときに呼び出されなかったのは
drawLayer:inContext:
. また、このような理由から、決して
CALayer
描画デリゲートメソッドをカスタム
UIView
のサブクラスを作成します。また、どのビューも他のレイヤーの描画デリゲートにするべきではありません。それはあらゆる種類の奇妙なことを引き起こすでしょう。
もし、あなたが
drawLayer:inContext:
にアクセスする必要があるため
CGContextRef
にアクセスする必要があるため、そのアクセスは
drawRect:
を呼び出すことで
UIGraphicsGetCurrentContext()
.
関連
-
[解決済み] Cocoapodsの使用時にXcodeの警告を無視する
-
[解決済み] Objective-CでENUMを定義して使用するにはどうすればよいですか?
-
[解決済み] アプリのプッシュ通知設定をリセットする
-
[解決済み] エラー : サービスは無効です
-
[解決済み] UIViewのサブビューをセンタリングする方法
-
[解決済み] cocoaアプリケーションのinfo plistにある「bundle display name」と「bundle name」の違いは何ですか?
-
[解決済み] テーブルビューの行をプログラムで選択する
-
[解決済み] UIImageViewのコーナー半径の設定がうまくいかない
-
[解決済み] Objective-Cのプロトコルでプロパティを含むものはどう扱えばいいのか?
-
[解決済み] 現在のメソッド呼び出しのスレッド ID を取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] iOS UITableViewのHeaderView(セクションヘッダーではない)を追加する
-
[解決済み] iosアプリの最大メモリ使用量
-
[解決済み] UIViewの上側だけにボーダーを追加する方法
-
[解決済み] iPhoneでMonoTouchは禁止になったのか?[クローズド]
-
[解決済み] Objective-C 2.0でメソッドに非推奨のフラグを立てるにはどうすればよいですか?
-
[解決済み] ナビゲーションコントローラスタック、サブビュー、モーダルコントローラを使用せずに、ビューコントローラの変化をアニメーション化する?
-
[解決済み] iphoneシミュレーターでキーボードを使うにはどうしたらいいですか?
-
[解決済み] iPhoneシミュレーターでカメラをテストするには?
-
[解決済み] UITextFieldの高さを設定するには?
-
[解決済み] アプリを提出する前にitunesのリンクを取得する