5

私は CABasicAnimation を使用して CALayer をアニメーション化しており、アニメーションが完了したときにレイヤーがその位置に留まることを期待しています。ほぼすべてのソリューションが次のように表示され、正常に動作します

animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;

ただし、Core Animation in Practice Part 1 (~38-41mins) の 2010 WWDC スピーカーは、見つかった消えるレイヤーに対する解決策のほとんどは「偽物」であり、レイヤーをアニメーション化する正しい方法はおおよそ次のとおりであると述べています。

animation.fromValue = [NSNumber numberWithFloat:layer.position.y];
layer.position = CGPointMake(layer.position.y, endPoint); 
animation.toValue = [NSNumber numberWithFloat:endPoint];

この理由は、removedOnCompletion/fillMode ソリューションはプレゼンテーション レイヤーのみをフリーズし、実際のレイヤーにはまだ元の位置が設定されているためです。

スピーカーを誤解している場合は、訂正してください。

私が彼を正しく理解していれば、いつそれが問題になるのですか?

ありがとう、スティーブ

4

2 に答える 2

2

それはあなたが何をしたいかによります...あなた自身の説明はかなり明確に思えます。

実際の値を変更せずにプロパティのみをアニメーション化すると、「見えるもの」と「あるがまま」は実際には異なります。ほとんどの場合、それは望ましくありません。(また、UIViewアニメーションまたはCALayer暗黙的なアニメーションを使用する場合、「何が」と「何が見えるか」が同期されます。これは、ダイレクト セッター構文​​と一致しています)。

しかし、場合によっては、実際の値を保持し、一時的に画面に別のものを表示すると便利な場合があります...自分が何をしているのかを知っている限り!

于 2013-04-22T16:18:07.193 に答える