iOS 获取子视图的旋转

Posted

技术标签:

【中文标题】iOS 获取子视图的旋转【英文标题】:iOS Get Subview's Rotation 【发布时间】:2012-04-20 22:50:05 【问题描述】:

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

【问题讨论】:

重复的问题在:***.com/questions/2051811/… 看看我的answer 到@TheKraken 提到的question。 【参考方案1】:

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

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

所以,例如

- (float)currentAngleOfView:(UIView *)view

    CGAffineTransform transform = view.transform;
    return atan2f(transform.b, transform.a);

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

如果您想应用更复杂或任意的转换,那么事情会变得复杂得多。你会想看看如何计算正态矩阵。根据记忆,我认为您会想要辅助词,这听起来很有趣。

【讨论】:

以上是关于iOS 获取子视图的旋转的主要内容,如果未能解决你的问题,请参考以下文章

旋转iOS后子视图控制器高度为零

iOS:禁用子视图的自动旋转

在 iOS 7 中重新计算旋转时的子视图大小

在 ios 中,视图控制器中移动子视图以处理旋转的正确位置在哪里?

旋转视图和子视图

iOS - 旋转视图显示背景