根据rotated(by:)
的文档:
角
旋转仿射变换的Angular (以弧度为单位)。在iOS中,正值指定逆时针旋转,负值指定顺时针旋转。
这引起了很多混乱,并且已经得到了部分解答,但是即使我们接受坐标系被翻转(并且只是按照文档所述的相反操作),在设置动画时仍然会提供不一致的结果。
旋转方向(顺时针或逆时针)取决于目标旋转与当前旋转的接近程度:
<= 180º
顺时针设置动画> 180º
逆时针设置动画
使用UIView.animate
或UIViewPropertyAnimator
显示不一致:
// 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))
}
4条答案
按热度按时间iezvtpos1#
试试这个:
wrrgggsh2#
答案是使用
CABasicAnimation
表示超过180 °的旋转,记住 * 正值表示顺时针 , 负值表示逆时针 *。w46czmvw3#
gojuced74#
第三个选项允许您在所需方向上旋转180º: