教えてください。
以下のようなコードを書いて、CALayer をアニメーションさせています。
func closingAnimation() -> CAAnimationGroup { let keyTimes: [NSNumber] = [0.0, 0.04, 0.2, 0.5, 0.8, 0.96, 1.0] let duration: Double = 1.4 let minValue = 0.7 let maxValue = 1.4 let rorateDegree: Float = 20 let rotateRight = rorateDegree * Float(Double.pi) / 180.0 let rotateLeft = -rorateDegree * Float(Double.pi) / 180.0 let timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) //アニメーショングループの作成 let animationGroup = CAAnimationGroup() animationGroup.timingFunction = timingFunction animationGroup.duration = duration animationGroup.fillMode = kCAFillModeForwards animationGroup.isRemovedOnCompletion = false //横方向に伸び縮みするアニメーション let moprhAnimationX = CAKeyframeAnimation(keyPath: "transform.scale.x") moprhAnimationX.timingFunction = timingFunction moprhAnimationX.keyTimes = keyTimes moprhAnimationX.values = [1.0, maxValue, minValue, maxValue, minValue, maxValue, 1.0] //縦方向に伸び縮みするアニメーション let moprhAnimationY = CAKeyframeAnimation(keyPath: "transform.scale.y") moprhAnimationY.timingFunction = timingFunction moprhAnimationY.keyTimes = keyTimes moprhAnimationY.values = [1.0, minValue, maxValue, minValue, maxValue, minValue, 1.0] //左右に回転するアニメーション let rotateAnimation = CAKeyframeAnimation(keyPath: "transform.rotation") moprhAnimationY.timingFunction = timingFunction rotateAnimation.keyTimes = [0, 0.25, 0.5, 0.75, 1.0] rotateAnimation.values = [0, rotateLeft, rotateRight, rotateLeft, 0] animationGroup.animations = [moprhAnimationX, moprhAnimationY, rotateAnimation] return animationGroup }
このアニメーションを動画に書き出すために、アニメーション再生時に CADisplayLink で drawHierarchy メソッドを 60fps で呼び出してキャプチャし、画像を CGImage で書き出して、動画に継ぎ足していくという処理をしているのですが、(案の定)処理が追いつかず、コマ落ちしてしまいます。
(drawHierarchy を使っているのは、その View だけでなく、背景になっている View もキャプチャするためです)
コマ落ちしないように、上記のアニメーションを1フレームだけ動かしてはキャプチャする、という処理を繰り返すようにしたいのですが、上記のような一連のアニメーションを特定のタイミングからスタートさせる方法が分かりません。
もし、アニメーションの中の特定のタイミングからスタートさせるというメソッドがあれば、speed を 0 に設定して、そのタイミングを 1フレームずつ進めてキャプチャすることができるのですが、そういう方法はあるのでしょうか。
教えて頂けると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。