这里有很多混淆和一组相应的问题,以及如何实现适当处理横向/纵向模式自动旋转的iPhone应用程序.当期望以横向模式开始时,实现这种应用尤其困难.最常见的观察效果是扰乱的布局和屏幕上不再识别触摸的区域.
对标记的问题进行简单搜索iphone并landscape揭示在某些情况下发生的这些问题:
仅横向显示具有多个笔尖的iPhone应用程序:应用程序以横向模式启动,第一个笔尖的视图呈现正常,从不同笔尖加载的所有视图都无法正确显示.
Iphone横向模式在加载新控制器时切换到Portraite模式:自解释
iPhone:仅在横向上,在第一个addSubview之后,UITableViewController无法正常旋转:与上面相同的问题.
iPhone仅限横向实用程序 - 模板应用程序:布局错误,控制器似乎无法识别视图应该旋转但在横向模式下显示剪切的纵向视图,导致屏幕的一半保持空白.
在纵向viewController之后的landscape中的presentModalViewController:模式视图也未正确呈现.
已经提出了一组不同的解决方案,其中一些包括通过CoreGraphics完全自定义动画,而其他解决方案则建立在从主笔尖加载的第一个视图控制器始终显示正确的观察的基础上.
我花了大量时间研究这个问题,最后找到了一个解决方案,它不仅是一个部分解决方案,而且应该在所有这些情况下都能正常工作.我打算在这篇CW帖子中为其他在横向模式下遇到UIViewControllers问题的人提供常见问题解答.
请提供反馈,并通过纳入任何相关的观察结果来帮助提高本职位的质量.如果您知道,可以随意编辑和发布其他/更好的答案.
我有三个ViewControllers设置来处理三个视图.我遇到的问题是在模拟器中方向是LandscapeRight(这是我想要的),并且第一个视图在该横向视图中正确显示,但是当我移动到第二个和第三个视图时,它们会出现逆时针旋转90度,手机屏幕左下角的视图左上角.我一直在尝试调试这几天,最接近我的线索是通过以下方式进行跟踪:
以下是我的app delegate的applicationDidFinishLaunching:
NSLog(@"1");
[window addSubview:welcomeController.view];
NSLog(@"2");
[window addSubview:goalController.view];
NSLog(@"3");
[window addSubview:planningController.view];
NSLog(@"4");
[window bringSubviewToFront:welcomeController.view];
NSLog(@"5");
Run Code Online (Sandbox Code Playgroud)
我的每个ViewControllers实现类似于以下内容的东西(唯一的变化是在传递给NSLog的字符串中切换出控制器的名称):
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
NSLog(@"called for WelcomeController");
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我在控制台上得到以下输出:
a
called for WelcomeController
called for WelcomeController
called for WelcomeController
called for WelcomeController
2
called for GoalController
3
called for PlanningController
4
5
Run Code Online (Sandbox Code Playgroud)
我觉得有趣的是,对于添加的第一个视图,shouldAutorotateToInterfaceOrientation被调用4次,而其他两个只被调用一次.我希望这可能是因为它首先必须进行一些设置(我相信模拟器在纵向模式下启动,所以它可能在进行旋转时调用它),但我发现相关性有点可疑.
我已经切换了顺序,以便首先为goalController调用addSubview,然后调用welcomeController.在这种情况下,它是以正确的横向方向显示的goalController(它通常是欢迎控制器).这似乎消除了我的XIB文件和ViewControllers本身.我不确定为什么调用addSubview的第一个视图是特殊的.我也尝试在索引0使用insertSubview,结果相同.