一个人如何制作动画'更改基于形状的自定义UIView,从一种形状到另一种形状?
比如说一个是创建一个看起来像形状的UIView,使用UIBezierPath创建。但是,您希望此视图对象在“动画”中更改。从自定义形状1到自定义形状2的样式?因此,我可以使用UIBezierPath创建两个单独的路径来表示两个形状,但我不清楚如何动画'从一个移动到另一个?
不确定是否有动画'这是正确的术语。例如,如果这本质上是不可动画的,那么也许我的意思是“在视觉上变形”'物体从一个到另一个的视图。
我正在阅读这些内容,但仍然没有看到如何:UIBezierPath,CAShapeLayer,CADisplayLink,
答案 0 :(得分:7)
您可以简单地更改path
的{{1}}属性,它将使用隐式动画进行动画处理。动画不需要显示链接,因为核心动画子系统会为您处理所有事情。显示链接适用于需要与显示器刷新率同步的高性能/准确度计时器。
要更改CAShapeLayer
的路径属性,可以使用CAShapeLayer
对象构建路径,然后返回其CGPath。像(在斯威夫特)
UIBezierPath
请记住,这是真正的代码,但是,您需要构建形状图层的属性以进行显示,例如边界和位置,并且至少您要设置形状图层&#39 ; 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
属性也可以设置好。
一旦确定了初始形状(路径),就可以创建路径可以设置动画的第二个贝塞尔曲线路径。不过,这就是问题所在。如果您的新路径与之前的路径没有完全相同的点数,则动画可能无法达到预期效果。
巧合的是,我最近一直在玩这种东西只是为了好玩。我写了一些代码来看看它是如何工作的。您可以在此处获取(Swift)代码:https://github.com/perlmunger/Morph。它完成了你在这个动画中看到的。它并没有像我期望的那样完全变形,但它提供了一个简洁的例子: