在我的应用中,我使用UIView
将CMMotionManager
转到设备方向。无论用户如何绕z轴旋转,我们的想法都是保持UIView
级别。用飞机拍摄地平仪仪器。
这确实很有效,但现在我受到了真正的挑战。我希望在旋转时调整UIView
的框架大小以使其始终完全适合设备屏幕并保持其纵横比。请参阅下面的精彩图纸。
非常感谢任何帮助!
答案 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相。