您可以简单地更改path
a 的属性,CAShapeLayer
它将使用隐式动画进行动画处理。动画不需要显示链接,因为核心动画子系统会为您处理一切。当您需要与显示器的刷新率同步的高性能/精度计时器时,显示链接适用。
要更改 a 的路径属性CAShapeLayer
,您可以使用对象构建路径UIBezierPath
,然后返回其 CGPath。像(在 Swift 中)
let bezier = UIBezierPath()
bezier.moveToPoint(CGPointMake(100.0, 100.0))
bezier.addLineToPoint(CGPointMake(150.0, 90.0))
...
bezier.closePath()
let shapeLayer = CAShapeLayer()
shapeLayer.path = bezier.CGPath
请记住,这是真正的代码,但是,您需要构建形状图层的属性以进行显示,例如边界和位置,并且至少您需要设置形状图层strokeColor
,以便查看发生了什么. fillColor
出于同样的原因,也可以设置该属性。
一旦你建立了你的初始形状(路径),你可以创建第二个贝塞尔路径,你的路径可以动画化。不过,这就是问题所在。如果新路径的点数与之前的路径不完全相同,则动画可能不会达到您的预期。
巧合的是,我最近一直在玩这种东西,只是为了好玩。我写了一点代码来看看它是如何工作的。您可以在此处获取该 (Swift) 代码:https ://github.com/perlmunger/Morph 。它执行您在此动画中看到的操作。它并没有完全按照我期望的方式变形,但它提供了一个简洁的插图: