私のアプリはCALayer
、ビューを描画するために使用します。より正確には、の最上位レイヤーのdrawLayer:inContext:
サブレイヤーでメソッドを使用しUIView
ます。これは、連続する描画の「暗黙の」アニメーションをdrawLayer:inContext:
時間の経過とともに互いにフェードアウトさせる良い方法です。フェード アニメーションはかなり速く (おそらく 0.25 秒) 発生しますが、その持続時間を変更するには、単に という別のデリゲート メソッドを実装しactionForLayer:forKey:
ます。この完全に機能する実装例では、デフォルトの持続時間が 2.0 秒に引き伸ばされます。
- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:event];
animation.duration = 2.0;
return animation;
// or return nil for the default duration.
}
当面の問題に移ります。
フェードが完了する時間よりも速く呼び出す[sublayer setNeedsDisplay]
と、新しいフェードごとに突然のジャンプが見られます。見た目から、進行中のフェードがキャンセルされ、その最終状態が新しいフェードの開始点として使用されます。これはそれほど驚くべきことではないかもしれませんが、視覚的な結果はかなり望ましくありません。
黒から白への 10 秒間のフェードと、開始の 5 秒後にトリガーされる別の黒へのフェードのシナリオを考えてみましょう。アニメーションは黒から白にフェードし始めますが、「中間のグレー」になると、再び黒にフェードする前に完全な白にジャンプします。
これを防ぐ方法はありますか?レイヤーをグレーから黒に戻すことはできますか? UIViewAnimationOptionBeginFromCurrentState
(UIView アニメーションで使用される)言うことに相当する CALayer の描画はありますか?
乾杯。