2012-03-20 7 views
0

2つのレイヤーを持つビューを実装したいと思います。次に、いくつかのボタンを押すと、これらのレイヤーで別々に描画したいと思っています。複数のCALayerの図面をビューで扱う場合

私が実装したデリゲートメソッド:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context 

が、問題はこのデリゲートだけdrawLayerは常にビューのルート層のために呼び出されます、その後[myviewclass setNeedsDisplay](ない[mylayer setNeedsDisplay]による)の方法として解雇されていることです。

正確なcontextmylayerが呼び出され、そのコンテキストを使用して特定のレイヤーで描画ができるようにしたいと思います。

これを達成する方法をお手伝いしてください。

+0

レイヤの代理人はなんですか?景色? – sch

+0

はい、私はデリゲートをクラッシュするアプリケーションを表示するように設定しようとしているときに別の問題がthats ... delegate.Currentlyとして何を設定するか分からない..デリゲートを何かに設定していません.. – Amit

答えて

3

レイヤのデリゲートを設定し、デリゲートメソッドdrawLayer:inContext:を実装する必要があります。それ以外の場合、レイヤーはそのメソッドを呼び出す必要があるオブジェクトを特定できません。

また、レイヤの代理人はUIViewにできません。そのため、代理人として別のものを使用する必要があります。

たとえば、レイヤーのデリゲートとしてビューコントローラーを使用できます。まず、ビューコントローラにメソッドdrawLayer:inContext:を実装します。次に、ビューコントローラをレイヤのデリゲートとして設定します。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // ... 
    self.view.layer1.delegate = self; 
    self.view.layer2.delegate = self; 
} 

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 
{ 
    if (layer == self.view.layer1) { 
     // ... 
    } else if (layer == self.view.layer2) { 
     // .. 
    } 
} 
+0

ねえ、ありがとう:)簡単に各レイヤーのNSObjectでクラスを作成し、デリゲートメソッドをそこに実装します。デリゲートをクラスとして設定します。 – Amit

+0

はい、これもできます。 – sch

関連する問題