2011-12-30 10 views
0

私はCoreAnimationでiPadの絵本を作っています。スプライトシートからアニメーションフレームを読み込むために、私はSpriteクラス(CALayerサブクラス)のようにしました。ここに似た何か:http://mysterycoconut.com/blog/2011/01/cag1/。 境界とcontentsRect(そして私の場合は位置も)を設定するためにレイヤーのデリゲートを使用していませんが、CALayerサブクラスの-displayメソッドで直接行っています。CALayer - 表示方法が呼び出されていない

私はダミーを作成し、それは完全に動作していました。私のプロジェクトにコードを移動したとき、私のサブクラスの-displayメソッドはもはや呼び出されません。私はCALayerとCoreAnimation Programming Guideのドキュメンテーションを何回も読んできましたが、-displayメソッドが呼び出されたときの情報はありません。私はそれがテンプレートパターンを使用していることを知っているだけです。つまり、自分で呼び出すべきではなく、-displayメソッド自体を呼び出す[layer setNeedsDisplay]を呼び出す必要があります。私はこれを成功させずにやってみました。

コードが必要な場合は、教えてください。

アイデア?

UPDATE

私は、メソッドが呼び出されていなかった理由を発見しました。それは言及する価値がないので、恥ずかしいです:0。とにかく、私はまだ正確に表示メソッドが呼び出されていることを知ることに興味があります。アニメーションを作成してトリガーする必要があることに気付きました。 [layer addSublayer:myCustomLayer]を使用してレイヤーを表示階層に追加しただけでは、このメソッドは呼び出されませんでした。

+1

困ったことに心配する必要はありません。問題があった場合は、他の人も最終的に回答を投稿することで助けになります。 – jrturton

+0

私の問題に対する解決策は、私の元の問題とは関係がなかったので、誰にとってもあまり興味がないと思っていました。私はとにかく私の愚かな間違いで答えを掲示します。 – strave

答えて

1

ここで私は間違っています。レイヤー階層に追加されていたポインタを使用する代わりに、新しいレイヤーポインタを作成していました。

CALayer *layer = nil; 

if (animatedLayer == YES) 
{ 
    // Here's the problem, I created a new layer pointer instead of using the one before. 
    AnimatedLayer *layer = [[AnimatedLayer alloc] init]; 

    // more stuff being done to the AnimatedLayer 
} 
else 
{ 
    layer = [[CALayer alloc] init]; 

    // more stuff being done to the CALayer 
} 

[masterLayer addSublayer:layer]; 
[layer release]; 

このような愚かな間違いは、デバッグに数時間かかりました。私はもう少し寝なければならず、コーヒーを飲んではいけません。

関連する問題