iOS获取子视图的轮换

The*_*ken 0 iphone objective-c subview uiview ios

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

Tom*_*mmy 5

CGAffineTransformMakeRotation明确定义返回与变换的COS(角)矩阵a值,罪(角度)b,等等(和,考虑到变换的工作方式,这就是它真正能做的唯一的事).

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

所以,例如

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

因为这将涉及以适当的方式划分ab字段的反正切,即使您应用缩放(只要它对每个轴相同)或转换,该方法也将继续工作.

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