Uiview 如何';制作动画';在IOS中更改视图的形状?(即,将其路径从一个更改为另一个)

Uiview 如何';制作动画';在IOS中更改视图的形状?(即,将其路径从一个更改为另一个),uiview,core-animation,uibezierpath,cashapelayer,cadisplaylink,Uiview,Core Animation,Uibezierpath,Cashapelayer,Cadisplaylink,如何“动画化”更改基于形状的自定义UIView,从一个形状更改为另一个形状 比如说,我们正在创建一个UIView,它看起来像一个使用UIBezierPath创建的形状。但是,您希望此视图对象以“动画”样式从自定义形状1更改为自定义形状2吗?因此,我可以使用UIBezierPath创建两个单独的路径来表示这两个形状,但我不清楚如何“动画化”从一个移动到另一个 也不确定这里的“动画”是否正确。例如,如果这本质上是不可设置动画的,那么我的意思可能是“视觉变形”对象的视图从一个到另一个 我正在阅读这些内

如何“动画化”更改基于形状的自定义UIView,从一个形状更改为另一个形状

比如说,我们正在创建一个UIView,它看起来像一个使用UIBezierPath创建的形状。但是,您希望此视图对象以“动画”样式从自定义形状1更改为自定义形状2吗?因此,我可以使用UIBezierPath创建两个单独的路径来表示这两个形状,但我不清楚如何“动画化”从一个移动到另一个

也不确定这里的“动画”是否正确。例如,如果这本质上是不可设置动画的,那么我的意思可能是“视觉变形”对象的视图从一个到另一个


我正在阅读这些内容,但仍然不太明白:UIBezierPath、CAShapeLayer、CADisplayLink,

您可以简单地更改
CAShapeLayer
路径
属性,它将使用隐式动画制作动画。动画不需要显示链接,因为核心动画子系统会为您处理所有事情。当您需要与显示器刷新率同步的高性能/精度计时器时,显示链接可用

要更改
CAShapeLayer
的路径属性,可以使用
UIBezierPath
对象建立路径,然后返回其CGPath。类似(用Swift)的东西

请记住,这是真实的代码,但是,您需要构建图形层的属性以进行显示,例如边界和位置,并且您至少需要设置图形层的
strokeColor
,以便查看发生了什么。出于同样的原因,
fillColor
属性也可以设置

建立初始形状(路径)后,可以创建第二个贝塞尔路径,该路径可以设置动画。但问题是。如果新路径的点数与上一条路径的点数不完全相同,则动画可能不会达到预期效果

巧合的是,我最近一直在玩这种东西只是为了好玩。我写了一些代码来看看它是如何工作的。您可以在此处获取(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