将UIView旋转到设备方向并调整边界大小

时间:2014-09-17 19:48:28

标签: ios objective-c uiview screen-orientation catransform3d

在我的应用中,我使用UIViewCMMotionManager转到设备方向。无论用户如何绕z轴旋转,我们的想法都是保持UIView级别。用飞机拍摄地平仪仪器。

这确实很有效,但现在我受到了真正的挑战。我希望在旋转时调整UIView的框架大小以使其始终完全适合设备屏幕并保持其纵横比。请参阅下面的精彩图纸。

非常感谢任何帮助!

enter image description here

1 个答案:

答案 0 :(得分:1)

假设您设备的屏幕宽度为W,高度为H,视图的高度为h,宽度为w。您需要通过缩放系数缩放视图的框架,以确保视图的对角与屏幕边缘接触。如果您旋转了角度θ,那么您希望找到满足以下条件的最大比例因子:

scaling_factor *(h * sin(theta)+ w * cos(theta))< = W;和

scaling_factor *(h * cos(theta)+ w * sin(theta))< = H

所以,重新安排这些:

scaling_factor< = W /(h * sin(θ)+ w * cos(theta));和

scaling_factor< = H /(h * cos(theta)+ w * sin(theta))

计算这些中的每一个,然后选择两者中较小的一个。相应地调整帧的大小,或使用CGAffineTransformMakeScale通过视图的transform属性应用缩放因子。如果θ为负或大于pi / 2,则需要稍微调整这些公式,或者对于负θ,使用abs(theta),对于theta,使用(pi-theta); Pi / 2相。