#swift #xcode #cashapelayer #catransaction
#swift #xcode #cashapelayer #catransaction
Вопрос:
У меня есть CAShapeLayer
и пытаюсь анимировать несколько свойств. Я использовал CABasicAnimation
вначале, но поскольку это повторяется снова и снова, мне нужен самый удобный способ сделать это.
Следующий код анимируется правильно:
private func animateDidBecomeStraight () {
CATransaction.flush()
CATransaction.begin()
CATransaction.setAnimationDuration(0.2)
self.myShape.fillColor = UIColor.Red.cgColor
self.myShape.lineWidth = 1
self.myShape.strokeColor = UIColorRed.cgColor
CATransaction.commit()
}
private func animateDidBecomeUnStraight () {
CATransaction.begin()
CATransaction.setAnimationDuration(0.5)
self.myShape.fillColor = UIColor(white: 1, alpha: 1).cgColor
self.myShape.strokeColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5).cgColor
self.myShape.lineWidth = 0.1
CATransaction.commit()
}
Прямое и распрямленное вызывается по порядку и никогда не повторяется.
Проблема
В первый раз анимации работают с надлежащей продолжительностью. Когда Straight вызывается в первый раз и когда Unstright вызывается в первый раз. После этого они, похоже, теряют продолжительность анимации. Изменения кажутся мгновенными.
Комментарии:
1. Так какова же цель? Это прямолинейно-прямолинейно-прямолинейно… Навсегда? Если да, то где ваши «петли»? Я не понимаю, как вы когда-либо запускаете эти анимации, и, конечно, не друг за другом. Кроме того, CABasicAnimation на самом деле был правильным способом сделать это, поэтому, пожалуйста, покажите этот код.
Ответ №1:
CATransaction — это не то, как это сделать. Создайте два объекта CABasicAnimation, один для прямого и один для распрямления. Объедините их в CAAnimationGroup. Теперь настройте CAAnimationGroup как повторяющуюся.