跟随路径的点

时间:2017-03-27 17:01:29

标签: ios swift calayer caanimation

我正在寻找一种简单的方法,可以通过闭合路径动画点移动。

我有一些用UIBezierPath创建的路径。由CAShapeLayer代表。

我想在这个形状的圆点上放置这个闭合的路径。问题是我找不到最好的方法。我不想以编程方式添加每个点。也许有一些方法可以使用粒子。

路径将有不同的形状。最重要的是取悦彼此之间相同距离的点。

我很乐意帮助

1 个答案:

答案 0 :(得分:2)

以下是您可以在游乐场中运行的示例。

这是基于Matt Long的文章(从前一段时间开始)http://www.cimgf.com/2009/10/20/marching-ants-with-core-animation/

import UIKit
import PlaygroundSupport

let container = UIView(frame: CGRect(x: 0, y: 0, width: 600, height: 700))

container.backgroundColor = UIColor.green

let v = UIView(frame: CGRect(x: 100, y: 100, width: 300, height: 300))
v.backgroundColor = UIColor.yellow

let shp = CAShapeLayer()
shp.bounds = v.bounds
let pth = UIBezierPath()
pth.move(to: CGPoint(x: 20, y: 220))
pth.addLine(to: CGPoint(x: 20, y: 40))
pth.addLine(to: CGPoint(x: 40, y: 80))
pth.addLine(to: CGPoint(x: 120, y: 40))
pth.addLine(to: CGPoint(x: 140, y: 40))
pth.close()
shp.strokeColor = UIColor.orange.cgColor
shp.fillColor = UIColor.cyan.cgColor
shp.lineWidth = 3.0

shp.lineDashPattern = [5, 5]

shp.path = pth.cgPath
shp.position = CGPoint(x: 150, y: 150)
v.layer.addSublayer(shp)

container.addSubview(v)

let dashAnim = CABasicAnimation(keyPath: "lineDashPhase")
dashAnim.fromValue = 0
dashAnim.toValue = 15
dashAnim.duration = 0.75
dashAnim.repeatCount = 10000

shp.add(dashAnim, forKey: "lineDashPhase")

PlaygroundPage.current.liveView = container
PlaygroundPage.current.needsIndefiniteExecution = true