我正在做一个应用程序,我有一个GLES视图,我不想自动旋转,UIKit视图,做需要自动旋转
显然这不是你应该做的事情,因为我找不到任何好的文件。但是我完全相信这正是我想要的。
我找到了一个解决方案,但感觉很讨厌:
任何人都知道更好的解决方案吗?注意:我绝对肯定我想要自动旋转UIKit视图而不是GL视图。
感谢您的时间,非常感谢。 =)
答案 0 :(得分:2)
我为类似的情况提出了不同的策略。在我的情况下,我允许所有视图旋转,但然后使用转换将我想要保持稳定的视图恢复到其原始方向。这是有效的,因为“非旋转”视图是方形的,但有了更多的数学,它也适用于其他形状。这是我放在willRotateToInterfaceOrientation:duration:
switch (toInterfaceOrientation) {
case UIInterfaceOrientationPortrait:
steadyView.transform = CGAffineTransformIdentity;
break;
case UIInterfaceOrientationLandscapeLeft:
steadyView.transform = CGAffineTransformMakeRotation(M_PI_2);
break;
case UIInterfaceOrientationPortraitUpsideDown:
steadyView.transform = CGAffineTransformMakeRotation(M_PI);
break;
case UIInterfaceOrientationLandscapeRight:
steadyView.transform = CGAffineTransformMakeRotation(3*M_PI_2);
break;
}
steadyView
是控制器的子视图。这似乎可以解决问题。
答案 1 :(得分:1)
没有比你提议的更好的方法来做到这一点。
您确定不仅要旋转OpenGL视图吗?如果您的应用程序仅限于ES 2.0设备以及之后的iOS 4.2,那么对OpenGL视图使用UIViewController轮换不会有任何性能损失。
答案 2 :(得分:0)
旋转后直接绘制OpenGL内容会不会更简单?只需在渲染器中应用旋转即可撤消OpenGL视图的旋转。
您可能会看到不可接受的跳回原始旋转,但您可以轻松解决这个问题。一旦视图完成旋转,您可以为返回旋转设置动画。或者,您可以覆盖willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
和willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:
,以便在界面轮换期间为保留在原位的内容设置动画。
答案 3 :(得分:0)
所以我发现它在幕后是如何运作的; Frogblast是对的,没有任何更好的方法可以做到。
当视图被添加到没有子视图的窗口时,该视图的控制器自动成为“旋转权限”;如果该视图控制器从shouldAutorotateToInterfaceOrientation返回NO,则其他视图也不会旋转。但是,即使“旋转权限” 旋转,仍然允许不旋转后续视图(使用控制器)添加到窗口中。
我不明白为什么他们这样做了,但你有它。