在我的应用程序中,我使用 CMMotionManager
将 UIView
旋转到设备方向。这个想法是保持 UIView
级别,无论用户如何围绕其 z 轴旋转它。想象一下飞机上的地平线仪。
这确实工作得很好,但现在我面临着真正的挑战。我想在旋转时调整 UIView
的框架大小,以便它始终完全适合设备屏幕并保持其纵横比。请参阅下面的精彩绘图。
我们将不胜感激任何帮助!
最佳答案
假设您设备的屏幕宽度为 W,高度为 H, View 的高度为 h,宽度为 w。您需要通过比例因子缩放 View 的框架,以确保 View 的相对角与屏幕的边缘接触。如果你旋转了一个角度 theta,那么你想找到满足以下条件的最大缩放因子:
比例因子 * ( h * sin(theta) + w * cos(theta)) <= W ;和
比例因子 * ( h * cos(theta) + w * sin(theta)) <= H
因此,重新安排这些:
scaling_factor <= W/( h * sin(theta) + w * cos(theta));和
比例因子 <= H/( h * cos(theta) + w * sin(theta))
计算每一项,然后选择两者中较小的一个。相应地调整框架的大小,或使用 CGAffineTransformMakeScale 通过 View 的变换属性应用缩放因子。如果 theta 为负或大于 pi/2,则需要稍微调整这些公式,或者使用 abs(theta) 表示负的 theta,使用 (pi - theta) 表示 theta > pi/2。
关于ios - 将 UIView 旋转到设备方向并调整边界大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25899122/