2017-03-27 10 views
1

나는 닫힌 경로로 움직이는 점을 움직이게하는 간단한 방법을 찾고 있습니다.경로를 따라 오는 점

UIBezierPath로 만든 경로가 있습니다. CAShapeLayer에 의해 표현됩니다.

이 닫힌 경로 주위를 이동할 점 모양을 배치하고 싶습니다. 문제는 내가 가장 좋은 방법을 찾을 수 없다는 것입니다. 프로그래밍 방식으로 모든 점을 추가하고 싶지 않습니다. 아마도 입자를 사용할 수있는 방법이있을 수 있습니다.

경로의 모양이 달라집니다. 가장 중요한 점은 서로 같은 거리의 점들입니다.

내가 도움

여기
+0

당신이'CAKeypathAnimation'를 시도 기반으로? – clemens

+0

무엇을 시도 했습니까? CAShapeLayer에는 * .lineDashPattern * 속성이 있습니다. 'myShapeLayer.lineDashPattern = [1 3]'또는 비슷한 것으로 설정하면 어떻게 될까요? – dfd

답변

2

에 대한 기쁠 것이다 당신이 놀이터에서 실행할 수있는 예이다.

그것은 (다시 잠시에서) 매트 롱의 글 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