0

CALayers の調査中にこのソリューションを見ました。複数のサブレイヤーを持つ UIView 内にカスタム描画を実装する方法を探していました。サブレイヤーに次のような名前を付けました。

layer1.name = @"Back";
layer2.name = @"Middle";
layer3.name = @"Front";

そして、このレイヤーによって実装されるカスタム メソッドを作成しました

-(void)drawBackLayer:(CALayer *)layer inContext:(CGContextRef)ctx
-(void)drawMiddleLayer:(CALayer *)layer inContext:(CGContextRef)ctx
-(void)drawFrontLayer:(CALayer *)layer inContext:(CGContextRef)ctx

問題は、これらのメソッドが実装されていないことです。代わりにdrawLayer:inContext:、ビューのルート レイヤーで使用されている が 4 回実装されています。これは、カスタム レイヤがカスタム メソッドの代わりにこのメソッドを実装することを意味します。誰かが私に理由を説明できますか?

注:リンクで参照している解決策は、Dave Lee によって提供されたコードです。

4

1 に答える 1

2

UIView で使用されるレイヤーは、これらのメッセージを実装するカスタム CALayer である必要があります。特定のレイヤーを使用する UIView サブクラスを取得する方法は、クラス メソッド「+(Class)layerClass」を使用することです。

- UIView のサブクラス化 (または UIImageView などのサブクラス化) - layerClass メソッドを実装し、[MyCALayer クラス] を返します。

これで、そのビューは YOUR CALayer サブクラスを使用します。

于 2012-07-17T11:26:57.790 に答える