0

我正在使用它的属性CGAffineTransformMakeRotation来旋转子视图。transform稍后,我需要找出子视图旋转了多远。我意识到我可以简单地使用 int 来跟踪这一点,但是有没有一种简单的方法来获取子视图的当前旋转?

4

1 回答 1

5

CGAffineTransformMakeRotation明确定义为返回一个矩阵,其中 cos(angle) 在变换的a值中, sin(angle) 在b等(并且,鉴于变换的工作方式,这是它真正可以做的唯一事情)。

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

所以,例如

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

因为这将做一个反正切,这将涉及以适当的方式划分ab字段,即使您应用缩放(只要它与每个轴相同)或平移,该方法仍将继续工作。

如果您想应用更复杂或任意的转换,那么事情会变得更加复杂。你会想看看如何计算正态矩阵。从记忆中,我认为您会想要辅助工具,它听起来和听起来一样有趣。

于 2012-04-20T23:21:46.773 回答