2017-05-07 140 views
1

我有一個正方形的圖像,我知道如何使它旋轉。動畫旋轉......然後停下來......然後再旋轉......等等。如何讓圖像旋轉(動畫)

我剛纔是一個基本的旋轉,但並不像上面的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) 
    } 
} 

有什麼想法就如何做到這一點?

回答

3

您需要使用加速和減速的定時功能,也稱爲易於放鬆定時功能。

我修改你的函數使用核心動畫的標準易於在-漸出計時功能:

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) 
    } 
} 

結果:

demo

注意,在你的形象,它看起來盒子每隔180度就會暫停一次,所以我改變了旋轉180度的功能。由於該盒子具有90度的徑向對稱性,它仍然看起來像是一路繞過,並在180度和360度處停頓。

如果您需要在沒有任何徑向對稱的情況下對圖像進行動畫處理,則需要使用CAKeyframeAnimation來實現180度和360度的易於出入。

+0

哇,這很快,它完美的作品!非常感謝 - 如果你只知道我非常感謝幫助!你是最好的 : ) – JEL

0

重複動畫與delay也可以實現類似的效果。

UIView.animate(withDuration: 1, 
         delay: 0.2, 
        options: [.repeat], 
       animations: { imageView.transform = imageView.transform.rotated(by: CGFloat.pi) }, 
       completion: nil)