2016-12-16 73 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")