2 デリゲートデザインパターンを利用してのcontents加工
「デリゲートデザインパターンを使い、用意してもらったオフスクリーンへ描画する」方法は、UIViewとself.layer間で利用されている方法です。私たちはUIViewの-drawRect:メソッドをオーバーライドすることで、暗黙裏にこの方法を利用していました。
まずは、このデリゲートデザインパターンを利用する方法を、customLayerのdelegateプロパティにViewController自身を設定する事で、実際に試してみましょう。
新規作成したCALayerのデリゲートオブジェクトにUIViewを指定してはいけない
UIViewやその派生クラスのインスタンスを、新規作成したCALayerのデリゲートオブジェクトとして指定してはいけません。UIViewは自身の持つCALayerに対し、デリゲートオブジェクト以上の密接な関係を持っていて、他のCALayerのデリゲートオブジェクトとして設定されると予想外の動きをします。
UIView派生クラスを定義し、その中で新規に独自画像が必要なCALayerを作ったら、おもわずdelegateプロパティにselfを渡したくなりますが、これはUIView Class Referenceのlayerプロパティの説明部分で明確に禁止されています。またUIViewのself.layerのdelegateプロパティを、持ち主のUIViewから別のオブジェクトに変更する事も禁止されています。
この記事は会員限定です。会員登録をすると続きをお読みいただけます。
ログイン / 新規登録