2017-02-21 33 views
-1

У меня есть следующее расширение для UIView для выполнения анимации гудения.CABasicAnimation не заканчивается Smoothly

Анимация работает нормально, хотя окончание не является гладким. Для окончательного подсчета анимации UIView отправляется center.x - 40 и резко возвращается к center.x.

Я не мог заставить его сделать окончание плавным образом. Как я могу это достичь?

extension UIView { 
    func buzz() { 
     let animation = CABasicAnimation(keyPath: "position") 

     animation.duration = 0.4 
     animation.repeatCount = 2 
     animation.autoreverses = true 
     animation.fromValue = NSValue(cgPoint: CGPoint(x: self.center.x - 40.0, y: self.center.y)) 
     animation.toValue = NSValue(cgPoint: CGPoint(x: self.center.x + 40.0, y: self.center.y)) 
     animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 

     layer.add(animation, forKey: "position") 
    } 
} 

Animation Preview

ответ

0

, прежде чем делать анимацию, вам необходимо установить позицию слоя, где она будет когда-то анимация завершается. Это потому, что анимация запускается отдельно на другом слое, который уходит после его завершения.

+0

Получил идею, но не мог бы вы потратить на это, предоставив образец кода. –

+0

добавьте эту строку после открытия скобки или в пустую строку после анимации ...: layer.position = CGPoint (x: self.center.x + 40.0, y: self.center.y) – Mozahler

+0

Эта строка кода делает он перемещается только в одном направлении (эффект гудения исчезает), и как только он заканчивается, представление выходит за пределы на 40. –

 Смежные вопросы

  • Нет связанных вопросов^_^