Как анимировать изображение с помощью UIBezierPath - PullRequest
0 голосов
/ 30 июня 2019

Я просто хочу переместить стрелку с фотографией руки с ее траекторией, теперь траектория только движется без изображения.

  1. Создан UIBezierPath и работает нормально
  2. создал CAShapeLayer для обоих "UIBezierPath"
  3. создал CALayer для моего изображения
  4. Добавлен CALayer в CAShapeLayer
  5. создал нужную анимацию
  6. Добавить анимацию в CAShapeLayer
  7. Добавить CAShapeLayer на мой взгляд

Путь анимирован очень хорошо, но изображение руки не анимировано, я пробовал много способов, но не могу найти причину.

enter image description here

Я попытался добавить изображение в качестве отдельного подпредставления и применил CAKeyFrameAnimations, но он тоже не работает

    override func draw(_ rect: CGRect) {

    let path = UIBezierPath()
    path.lineWidth = 2

    path.move(to: CGPoint(x: self.frame.width - 100, y: self.frame.height - 280))

    path.addCurve(to: CGPoint(x: self.frame.width - 100, y: self.frame.height - 280 - 190),
                  controlPoint1: CGPoint(x: self.frame.width - 50, y: self.frame.height - 280 - 100),
                  controlPoint2: CGPoint(x: self.frame.width - 60, y: self.frame.height - 280 - 140))

    let shapelayer: CAShapeLayer = CAShapeLayer()
    shapelayer.path = path.cgPath

    shapelayer.strokeColor = UIColor.red.cgColor
    shapelayer.lineWidth = 2
    shapelayer.fillColor = UIColor.clear.cgColor

    let handLayer: CALayer = CALayer()
    handLayer.frame = CGRect(x: self.frame.width - 100, y: self.frame.height - 280, width: 40, height: 30)

    handLayer.contents = UIImage(named: "leftHand")?.cgImage
    shapelayer.addSublayer(handLayer)

    let animation: CABasicAnimation = CABasicAnimation(keyPath: "strokeEnd")
    animation.fromValue = 0.0
    animation.toValue = 1.0
    animation.duration = 2.0

    shapelayer.add(animation, forKey: "myStroke")

    self.layer.addSublayer(shapelayer)

}
...