iOS获取子视图的轮换

时间:2012-04-20 22:50:05

标签: iphone objective-c ios uiview subview

我正在使用CGAffineTransformMakeRotation使用其transform属性轮换子视图。稍后,我需要了解子视图已旋转了多远。我意识到我可以简单地使用int来跟踪它,但是有一种简单的方法可以获得子视图的当前旋转吗?

1 个答案:

答案 0 :(得分:5)

CGAffineTransformMakeRotationexplicitly defined返回变换的a值中的cos(角度)矩阵,b中的sin(角度)等等(并且,给定变换的工作方式,这是它真正能做的唯一事情。)

因此,您可以通过执行一些简单的反三角函数来计算当前旋转。 atan2可能是要使用的东西,因为它会自动适当地找出象限。

所以,例如。

- (float)currentAngleOfView:(UIView *)view
{
    CGAffineTransform transform = view.transform;
    return atan2f(transform.b, transform.a);
}

因为这会做一个涉及以适当的方式划分ab字段的反正切,即使你应用缩放,该方法也会继续有效(只要它是每个轴相同)或翻译。

如果您想应用更复杂或任意的转换,那么事情会变得复杂得多。您将要了解如何计算普通矩阵。从记忆中我觉得你想要这个调子,这听起来很有趣。