2016-12-16 39 views
1

按照documentationrotated(by:)如何控制Swift180º以上的動畫旋轉方向?

角度

角度,以弧度爲單位,通過該旋轉仿射變換。在iOS中,正值指定逆時針旋轉,負值指定順時針旋轉。

這已經引起了很大的混亂,並已partly answered,但即使我們接受的座標系統被翻轉(和剛做的文檔說的正好相反),但它仍然在動畫中提供不一致的結果。

旋轉方向 - 順時針或逆時針方向 - 依賴於目標旋轉到當前旋轉的接近:

  • <= 180º動畫順時針
  • > 180º動畫逆時針

使用UIView.animateUIViewPropertyAnimator顯示不一致性:

// Animates CLOCKWISE 
UIView.animate(withDuration: 2.0) { 
    let radians = Angle(179).radians // 3.12413936106985 
    view.transform = view.transform.rotated(by: CGFloat(radians)) 
} 
// Animates COUNTER-CLOCKWISE 
UIViewPropertyAnimator(duration: 2, curve: .linear) { 
    let radians = Angle(181).radians // 3.15904594610974 
    view.transform = view.transform.rotated(by: CGFloat(radians)) 
} 
// Does not animate 
UIViewPropertyAnimator(duration: 2, curve: .linear) { 
    let radians = Angle(360).radians // 6.28318530717959 
    view.transform = view.transform.rotated(by: CGFloat(radians)) 
} 
+0

180順時針方向:'讓弧度=角度(180).radians'康特順時針180: '讓弧度=角度(-540).radians' – Arvis

回答

2

的答案是使用CABasicAnimation爲旋轉180度過去,牢記正值順時針負值是逆時針

// Rotate 360º clockwise. 
let rotate = CABasicAnimation(keyPath: "transform.rotation") 
rotate.fromValue = Angle(0).radians 
rotate.toValue = Angle(360).radians 
rotate.duration = 2.0 
self.layer.add(rotate, forKey: "transform.rotation")