我正在使用CGAffineTransformMakeRotation
使用其transform
属性轮换子视图。稍后,我需要了解子视图已旋转了多远。我意识到我可以简单地使用int来跟踪它,但是有一种简单的方法可以获得子视图的当前旋转吗?
答案 0 :(得分:5)
CGAffineTransformMakeRotation
是explicitly defined返回变换的a
值中的cos(角度)矩阵,b
中的sin(角度)等等(并且,给定变换的工作方式,这是它真正能做的唯一事情。)
因此,您可以通过执行一些简单的反三角函数来计算当前旋转。 atan2
可能是要使用的东西,因为它会自动适当地找出象限。
所以,例如。
- (float)currentAngleOfView:(UIView *)view
{
CGAffineTransform transform = view.transform;
return atan2f(transform.b, transform.a);
}
因为这会做一个涉及以适当的方式划分a
和b
字段的反正切,即使你应用缩放,该方法也会继续有效(只要它是每个轴相同)或翻译。
如果您想应用更复杂或任意的转换,那么事情会变得复杂得多。您将要了解如何计算普通矩阵。从记忆中我觉得你想要这个调子,这听起来很有趣。