我有一个带BezierPath的UIView子视图和一个从a到b的路径的ImageView。路径有8点,我需要点1到点2的持续时间与点2到点3的不同,等等
我已经能够设置视图和路径并沿路径对图像进行动画处理,但是完整动画的持续时间相同。这是我的动画代码,非常感谢您。
let pathToFollow = path
let animation = CAKeyframeAnimation(keyPath: #keyPath(CALayer.position))
animation.path = pathToFollow?.cgPath
animation.duration = 10.0
animation.calculationMode = kCAAnimationPaced
animation.delegate = self
self.icons[Icon].layer.add(animation, forKey: nil)
答案 0 :(得分:0)
您有关键帧动画,这是一个很好的开始。但是您忘了添加一些实际的帧!为此,请提供一些keyTimes
。 (并删除kCAAnimationPaced
;这意味着整个动画只有一个速度,这与您想要的速度相反。)
请注意,使用这种路径动画时,帧分割点是用于定义路径的贝塞尔点,因此一切都将取决于路径的构造方式。
这是一个实际的例子:
观察我们围绕广场前进时每个角落的速度。拐角是控制点所在的位置。这是我使用的代码:
let path = CGPath(rect: CGRect(x: 120, y: 120, width: 100, height: 100),
transform: nil)
let anim = CAKeyframeAnimation(keyPath: #keyPath(CALayer.position))
anim.duration = 10
anim.path = path
anim.calculationMode = .linear
anim.keyTimes = [0.0, 0.7, 0.9, 0.98, 1.0]
self.v.layer.add(anim, forKey: nil)