2012-03-20 8 views
0

シナリオの背後:CALayerのプレゼンテーション層は遅く、時間

Iは、ユーザタップは、ブロックが停止すると7に列0から移動ブロックの移動の束を持っています。

- (IBAction)userTap:(id)sender 
{ 
    [block1.layer removeAllAnimations]; 
    [block2.layer removeAllAnimations]; 
    [block3.layer removeAllAnimations]; 
} 

私は今、プレゼンテーション層を取得し、私の基本的な情報を抽出します:

CALayer *player = [block1.layer presentationLayer]; 
float currentTranslation = [[pLayer valueForKeyPath:@"transform.translation.x"] floatValue]; 
// Set position of non-moving blocks here 

currentTranslationが正しい、と私は、同様のタイミングを使用して、それを確認した

は、ここに私のコードです。しかし、アニメーションは私のpresentationLayerよりも速く実行されているようですので、タップしたときに発生するジャークが表示されます。

ここでは何が起こっているのですか。これをどのように修正できますか?

+0

あなたはペース計算モード( 'kCAAnimationPaced'または' kCAAnimationCubicPaced')とキーフレームアニメーションをやっていますか?私はプレゼンテーション層があなたがそれをするときにたくさん離れているのを見ました。また、プレゼンテーションレイヤーは「現在表示されているレイヤーのバージョンに近似しています」、正確な値ではありません。 –

答えて

0

実行ループにアニメーションの時刻を設定し、CATransactionで暗黙のアニメーションCALayer'sを上書きしていますか?

This blog post covers some of it if not.

+0

CALayer自体がレンダリングされるので、私は彼自身のレンダリングループでそれを更新したとは思わない。 – Andy

関連する問題