如何减慢CALayer.transform动画的速度?

时间:2016-10-11 14:51:45

标签: ios animation transform duration

我目前需要一个图层(CALayer),我可以在这些比例之间缩放以创建动画。

private let invisibleScale = CATransform3DMakeScale(0.0,0.0,1.0)
private let fullScale = CATransform3DMakeScale(2.5,2.5,1.0)

只需在我的图层上调用下面的函数,该图层就像我想要的那样动画(除了快一点之外)。

animationLayer.transform = invisibleScale
animationLayer.transform = fullScale

我尝试将变换作为值添加CABasicAnimation,但由于它在完成动画后返回到原始比例,因此无法工作。像这样:

let animation = CABasicAnimation(keyPath: "transform")
animation.toValue = NSValue(caTransform3D: invisibleScale)
animation.duration = animationDuration
animationLayer.add(animation, forKey: "transform")

所以我尝试在最后添加animationLayer.transform = fullScale来更新动画后的状态。

let animation = CABasicAnimation(keyPath: "transform")
animation.toValue = NSValue(caTransform3D: invisibleScale)
animation.duration = animationDuration
animationLayer.add(animation, forKey: "transform")
animationLayer.transform = fullScale

这会产生一个与调用完全相同的动画:

animationLayer.transform = fullScale

我也尝过这样的话:

UIView.animate(withDuration: 10) {
        self.animationLayer.transform = fullScale
}

这也可以像输入animationLayer.transform = invisibleScale那样以相同的速度进行动画制作。

非常感谢任何有关如何完成这项工作的提示!

1 个答案:

答案 0 :(得分:8)

我终于找到了使用CATransaction的解决方案!

CATransaction.begin()
CATransaction.setAnimationDuration(0.5)
animationLayer.transform = transform
CATransaction.commit()