これは実際には、最初に考えるよりもはるかに単純であり、「速度なし」(一時停止) のアニメーションを使用します。一時停止したアニメーションがレイヤーに追加されたので、時間オフセットを変更して、アニメーション内の特定の時間にジャンプできます。
アニメーションを単独で実行する予定がない場合 (つまり、手動でのみ制御する場合)、アニメーションの継続時間を 1 に変更することをお勧めします。これは、0% から100%。期間が 0.3 の場合 (例のように)、タイム オフセットを 0 から 0.3 の間の値に設定します。
実装
上で述べたように、この小さなトリックに関係するコードはほとんどありません。
- (オプション) 期間を 1.0 に設定します。
- レイヤーの を設定し
speed
ます (はい、それらは に準拠していますCAMediaTiming
) またはアニメーションを 0.0 に設定します
- ドラッグ ジェスチャまたはスライダ (私の例のように) 中
timeOffset
に、レイヤーまたはアニメーションの を設定します (ステップ 2 で何をしたかによって異なります)。
これは、アニメーション+シェイプレイヤーを構成した方法です
CABasicAnimation *morph = [CABasicAnimation animationWithKeyPath:@"path"];
morph.duration = 1.; // Step 1
morph.fromValue = (__bridge id)fromPath;
morph.toValue = (__bridge id)toPath;
[self.shapeLayer addAnimation:morph forKey:@"morph shape back and forth"];
self.shapeLayer.speed = 0.0; // Step 2
そしてスライダーアクション:
- (IBAction)sliderChanged:(UISlider *)sender {
self.shapeLayer.timeOffset = sender.value; // Step 3
}
以下の最終結果を見ることができます。ハッピーコーディング!