ios - 具有负 M_PI 的 CGAffineTransformMakeRotation

标签 ios swift uiview ios8 cgaffinetransform

我正在使用 CGAffineTransformMakeRotation旋转 UIView在一个动画 block 中,我想将它逆时针旋转 180º .

但是当我放

myView.animateWithDuration(0.5)
myView.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI))

它仍然顺时针旋转。令我困惑的是,如果我“手动”写入 M_PI 的值,它按预期工作

 // this will rotate counterclockwise
 myView.transform = CGAffineTransformMakeRotation(CGFloat(-3.14159265358979))

为什么会这样?

编辑:添加了我正在使用动画 block

最佳答案

正如我在第一条评论中所述以及 Segii 已写的那样:动画将在它现在的值所在的位置和它试图去的位置之间采用最短的距离。恕我直言,最好的解决方案是使用 CABasicAnimation 强制逆时针旋转:

let anim = CABasicAnimation(keyPath: "transform.rotation")
anim.fromValue = M_PI
anim.toValue = 0
anim.additive = true
anim.duration = 2.0

myView.layer.addAnimation(anim, forKey: "rotate")
myView.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI))

这将一次性将其逆时针旋转 180。

你在最后一行指定的角度 + fromValue 是起始角度 -> 0。然后旋转距离 (toValue - fromValue) = 0 - M_PI = - M_PI -> 逆时针旋转180度。

关于ios - 具有负 M_PI 的 CGAffineTransformMakeRotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31007262/

相关文章:

ios - 无法使用 GCDAsyncSocket 接收已发送 UDP 数据包的响应

ios - 在sqlite中创建带有外键的表

ios - 回调中的类型推断错误

swift - 在 Swift Linux 中使用 'Any' 和 'AnyObject' 类型会出错

ios - 锁定屏幕与模态兼容

iphone - 我将如何在文件上添加/维护校验和?

ios - UIPageViewConrtoller 或 ScrollView

ios - Swift 将 TabBar 放在屏幕顶部在 iOS 11 中不起作用

ios - 如何在方向更改时更新 UIView 子类中的自动布局约束

iOS:删除位于 UITableView 之上的 UIView 会导致无法与表格交互