CAShapeLayer,使用事务设置动画路径

CAShapeLayer, animating path with Transactions

我想知道为什么当我尝试使用基本动画为 CAShapeLayerpath 属性 设置动画时它可以工作,但是当我尝试使用事务来完成它时却没有.

我仅使用事务就成功地为其他 animatable 属性设置了动画。这是我当前的代码:

    CATransaction.begin()
    CATransaction.setAnimationDuration(2.0)
        path = scalePath() // a scaled version of the original path
    CATransaction.commit()

新路径是在 CAShapeLayer:

的扩展中使用这个(非常硬编码的)函数缩放原始路径获得的
func scalePath()->CGPath{
    var scaleTransform =  CGAffineTransform.identity.translatedBy(x: -150, y: -150)
    scaleTransform = scaleTransform.scaledBy(x: 10, y: 10)
    let newPath = path?.copy(using: &scaleTransform)

    return newPath!
}

你能找出什么问题吗?

答案很简单但有点不尽如人意:虽然 path 属性 是可动画的,但它不支持 implicit 动画。这在 the documentation for the path property 的讨论部分被调用:

Unlike most animatable properties, path (as with all CGPathRef animatable properties) does not support implicit animation.

显式与隐式动画

"explicit" 动画是一个动画对象(例如 CABasicAnimation),通过在图层。

"implicit" 动画是一种 隐含地 发生的动画,作为更改动画 属性 的结果。

即使 属性 在事务中发生更改,动画也被视为隐式。