sublayerTransform 的动画持续时间被忽略

Animation duration ignored for sublayerTransform

以下结果导致视图在两秒内从 1/2 尺寸放大;

myView.layer.transform = CATransform3DMakeAffineTransform(
    CGAffineTransform.identity.scaledBy(x: 0.5, y: 0.5))
UIView.animate(withDuration: 2, animations: {
    myView.layer.transform = CATransform3DIdentity
})

然而,以下内容会导致视图立即放大 - 忽略持续时间;

myView.layer.sublayerTransform = CATransform3DMakeAffineTransform(
    CGAffineTransform.identity.scaledBy(x: 0.5, y: 0.5))
UIView.animate(withDuration: 2, animations: {
    myView.layer.sublayerTransform = CATransform3DIdentity
})

为什么 sublayerTransform 在持续时间内没有动画? CALayer 注意到它是可动画的。

您无法通过 UIView.animatesublayerTransform 设置动画。相反,使用 CABasicAnimation.

let animation = CABasicAnimation(keyPath: "sublayerTransform")
animation.fromValue = CATransform3DMakeAffineTransform(
    CGAffineTransform.identity.scaledBy(x: 0.5, y: 0.5))
animation.duration = 2
myView.layer.add(animation, forKey: "sublayerTransform")
myView.layer.sublayerTransform = CATransform3DIdentity