Проблема с анимацией CATransaction

#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 как повторяющуюся.