我有一个正方形的图像,我知道如何让它旋转。但不知道如何让它像这个动画一样旋转:
注意它是如何旋转的...然后稍微停下来...然后再次旋转...等等。
我所拥有的只是一个基本的旋转,但看起来不像上面的 gif:
extension UIView {
func rotate360Degrees(duration: CFTimeInterval = 3) {
let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
rotateAnimation.fromValue = 0.0
rotateAnimation.toValue = CGFloat(M_PI * 2)
rotateAnimation.isRemovedOnCompletion = false
rotateAnimation.duration = duration
rotateAnimation.repeatCount=Float.infinity
self.layer.add(rotateAnimation, forKey: nil)
}
}
关于如何做到这一点有什么想法吗?
您需要使用加速和减速的计时函数,也称为缓入缓出计时函数。
我已经修改了您的函数以使用核心动画的标准缓入缓出计时函数:
extension UIView {
func rotate360Degrees(duration: CFTimeInterval = 0.8) {
let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
rotateAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
let radians = CGFloat.pi / 4
rotateAnimation.fromValue = radians
rotateAnimation.toValue = radians + .pi
rotateAnimation.isRemovedOnCompletion = false
rotateAnimation.duration = duration
rotateAnimation.repeatCount=Float.infinity
self.layer.add(rotateAnimation, forKey: nil)
}
}
Result:
请注意,在您的图像中,盒子看起来每 180 度暂停一次,因此我将函数更改为仅旋转 180 度。由于盒子具有 90 度径向对称性,因此它看起来仍然像一直在旋转,在 180 度和 360 度处有停顿。
如果您需要在没有任何径向对称的情况下对图像进行动画处理,则需要使用CAKeyframeAnimation
实现 180 度和 360 度的缓入缓出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)