我想制作一个带有移动线条的动画,类似于狗摇尾巴。
我不知道如何开始。我以前使用过 Core Animation 的进度条CAShapeLayer
,但不知道它是否适用于此。我过去也使用PaintCode来帮助自定义路径,例如为要在其上进行动画处理的对象创建自定义UIBezierPath
。但也不确定PaintCode是否会对此有所帮助。
有什么想法吗?
这不会那么难。是的,使用CAShapeLayer
动画将是要走的路。
我会将图像的不变部分制作成位图,然后在顶部绘制形状层动画。
形状图层动画的诀窍在于,您使用的形状需要为动画的所有部分具有相同数量的控制点。
在尾部动画的情况下,您应该能够将其映射为一组二次贝塞尔曲线。您可能可以将尾巴绘制为带有圆形端盖的单个粗路径。(kCGLineCapRound
)。您将起始曲线设置为二次贝塞尔曲线,起点在尾部直线部分的起点向下,下一个控制点略微向右和弯曲尖端下方,下一个控制点在第一个控制点的上方和左侧,但仍在尖端的下方和右侧, 以及尖端的最后一个控制点。
曲线上方,基点和尖端之间大约 2/3 的道路,最后一个控制点位于尾部尖端。
您可能希望使用 Adobe Photoshop(或 GIMP)中的路径工具,并使用它来使用单个二次贝塞尔曲线创建起始和结束尾部曲线形状,然后记下您使用的控制点位置并将其输入到代码中。
您将创建一个CAShapeLayer
CABasicAnimation
,您将 fromValue 设置为起始 CGPath,将 toValue 设置为结束 CGPath。只需确保起始路径和结束路径具有相同数量的控制点即可。
我在Github上有一个名为RandomBlobs(链接)的项目,它展示了如何使用CGPath
s和CABasicAnimation
s对曲线进行动画处理,但它是用Objective-C编写的,而不是使用二次贝塞尔曲线,它创建了另一种曲线,称为Catmull-Rom样条曲线。 二次贝塞尔曲线实际上比 Catcall-Rom 样条曲线更容易设置, 如果你以前使用过CAShapelayer
,那么使用 CABasicAnimation
对CAShapeLayer
的更改进行动画处理背后的想法应该很容易从 Objective-C 转换为 Swift。您还可以使用一系列 Catmull-Rom 样条来获得您想要的尾部动画。Catmull-Rom 样条的优点是所有控制点都在曲线上。