我正在使用它的属性CGAffineTransformMakeRotation
来旋转子视图。transform
稍后,我需要找出子视图旋转了多远。我意识到我可以简单地使用 int 来跟踪这一点,但是有没有一种简单的方法来获取子视图的当前旋转?
问问题
896 次
1 回答
5
CGAffineTransformMakeRotation
被明确定义为返回一个矩阵,其中 cos(angle) 在变换的a
值中, sin(angle) 在b
等(并且,鉴于变换的工作方式,这是它真正可以做的唯一事情)。
因此,您可以通过做一些简单的反三角函数来计算当前的旋转。atan2
可能是要使用的东西,因为它会自动适当地找出象限。
所以,例如
- (float)currentAngleOfView:(UIView *)view
{
CGAffineTransform transform = view.transform;
return atan2f(transform.b, transform.a);
}
因为这将做一个反正切,这将涉及以适当的方式划分a
和b
字段,即使您应用缩放(只要它与每个轴相同)或平移,该方法仍将继续工作。
如果您想应用更复杂或任意的转换,那么事情会变得更加复杂。你会想看看如何计算正态矩阵。从记忆中,我认为您会想要辅助工具,它听起来和听起来一样有趣。
于 2012-04-20T23:21:46.773 回答