Быстрые анимационные линии с точками - PullRequest
0 голосов
/ 14 ноября 2018

Я создал несколько кругов (точек), используя CAShapeLayer и несколько линий, соединяющихся с этими кругами.Затем я оживляю эти круги.то, что я хочу сделать, это анимировать соединенные линии вместе с точками.Но только круги оживляют, а не линии.Как я могу достичь этого?Есть ли способ обновить положение строк? `

`

 var points: [CAShapeLayer] = []

let positions: [CGPoint] = [CGPoint(x: 70, y: 100),
                            CGPoint(x: 140, y: 100),
                            CGPoint(x: 210, y: 100),
                            CGPoint(x: 70, y: 200),
                            CGPoint(x: 140, y: 200),
                            CGPoint(x: 210, y: 200)]


var lines:[CAShapeLayer] = []

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    createPoints()
}

override func viewDidLoad() {
    super.viewDidLoad()
  }





func createPoints(){

    for (index,position) in positions.enumerated() {
        let point = CAShapeLayer()
        point.path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 10, height: 10), cornerRadius: 5).cgPath
        point.frame = CGRect(x: position.x, y: position.y, width: 10, height: 10)

        point.fillColor = UIColor.red.cgColor
        points.append(point)

        view.layer.addSublayer(points[index])
     }
        animatePosition(point: points[0])

        drawLines()
}

func drawLines(){
    for (index,_) in positions.enumerated() {
        let path = UIBezierPath()

             //Not completed
            //set line's start position to dots position
            path.move(to: points[index].position)

            //set line's end position to dots position
            path.addLine(to: points[index+1].position)

        let line = CAShapeLayer()
        line.fillColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0).cgColor
        line.strokeColor = #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1).cgColor
        line.lineWidth = 1
        line.strokeStart = 0
        line.path = path.cgPath
        lines.append(line)
        view.layer.addSublayer(line)
    }
}



func animatePosition(point: CAShapeLayer) {

    let animation = CABasicAnimation(keyPath: "position")

    animation.fromValue = [10, 10 ]
    animation.toValue = [100, 100]
    animation.autoreverses = true
    animation.repeatCount = .infinity
    animation.isAdditive = true

    point.add(animation, forKey: "pointStart")
   // line.add(animation, forKey: "positionLine")
    self.view.setNeedsLayout()

}

enter image description here

Что я хочу, это примерно так:enter image description here

...