2017-02-21 68 views
-1

我有以下擴展UIView執行一個動畫。CABasicAnimation不會平滑地結束

儘管結局並不平坦,但動畫效果並不理想。對於最終的動畫計數,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的範圍。 –