2017-02-21 94 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的范围。 –