Я пытаюсь оживить мой CAShapeLayer в форме линии по круговой траектории. Я создал начальный путь своего линейного слоя и конечный путь и добавил их в значения CABasicAnimation и обратно.
Однако анимация - это не то, что я ожидал. Я застрял здесь последние 2 дня.
func getAllLayers() -> [CALayer]
{
var layers = []
let pointerEndPoint = CGPoint(x: xPointOfPointer , y: yPointOfPointer) // Final end point of pointer
let radius = 5
let pointerFinalPath = UIBezierPath()
pointerFinalPath.addArc(withCenter: circleCenter, radius: radius, startAngle: 0, endAngle:2 * CGFloat.pi, clockwise: false)
pointerFinalPath.move(to: circleCenter)
pointerFinalPath.addLine(to: endPoint)
pointerFinalPath.close()
let pointerPathLayer = CAShapeLayer()
pointerPathLayer.path = pointerFinalPath.cgPath
pointerPathLayer.lineWidth = 2
pointerPathLayer.fillColor = UIColor.black.cgColor
pointerPathLayer.strokeColor = UIColor.black.cgColor
layers.append(pointerPathLayer)
let pointerInitialBezierPath = UIBezierPath()
pointerInitialBezierPath.addArc(withCenter: circleCenter, radius: radius,startAngle: 0 , endAngle: 2 * CGFloat.pi , clockwise: false)
pointerInitialBezierPath.move(to: circleCenter)
pointerInitialBezierPath.addLine(to: CGPoint(x: circleCenter.x - 50 , y: centerY))
pointerInitialBezierPath.close()
let pointerInitialCGPath = pointerInitialBezierPath.cgPath
let pointerFinalCGPath = pointerFinalPath.cgPath
// Pointer Animation
let pointerAnimation = CABasicAnimation(keyPath: #keyPath(CAShapeLayer.path))
pointerAnimation.fromValue = pointerInitialCGPath
pointerAnimation.toValue = pointerFinalCGPath
pointerAnimation.duration = 0.5
pointerAnimation.isCumulative = true
pointerPathLayer.add(pointerAnimation, forKey: "Animation")
return layers
}
Искал решение в Stack overflow, но не смог найти свою ошибку. Я хочу, чтобы моя анимация двигалась, как стрелка на часах.
Обратите внимание, что длина иглы изменяется по мере продолжения анимации. Я хочу, чтобы она оставалась постоянной длины, и чтобы менялся только угол иглы. Буду очень признателен за любую помощь.
РЕДАКТИРОВАТЬ 1: Если я попробую transform.rotation animation, я получу вращение иглы, но это произойдет вокруг неправильной центральной точки.
// Pointer Animation
let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
rotateAnimation.fromValue = 0.0
rotateAnimation.toValue = angleOfActualValueinRad
rotateAnimation.duration = 2.0
pointerPathLayer.add(rotateAnimation, forKey: "Animation")
РЕДАКТИРОВАТЬ 2: используйте эту ссылку, чтобы найти мой проект на github. Проблема с анимацией
anchorPoint
наpointerPathLayer
и вместо этого добавите анимацию вращения? - person Mike Haydan   schedule 23.07.2019