问题描述
||
我陷入一个使我发疯的问题!
我有一个以TabBarViewController开头的iPad应用程序。每个Tab都有自己的ViewController和nib文件。
为了使界面方向成为可能,我将所有方向都添加到了info.plist并将其TabBarController子类化为设置:
- (BOOL)shouldAutorotatetoInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
如果旋转界面,每个视图都会自动调整大小和格式,以显示正确的方向。如果我在模拟器中对其进行测试,那么一切看起来都很好,并且我可以在方向之间旋转。
现在,让我疯狂的一点是:
如果我以纵向模式启动该应用程序,则一切正常..但是,如果我以横向模式启动,则出现错误,并且当模拟器处于横向模式时,我的界面方向仍为纵向!
错误:
2011-05-24 21:50:15.011 Project[57995:207] Using two-stage rotation animation. To use the smoother single-stage animation,this application must remove two-stage method implementations.
我检查了这样的方向:
-(void)viewWillAppear:(BOOL)animated{
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
if ((orientation == UIInterfaceOrientationLandscapeLeft) || (orientation == UIInterfaceOrientationLandscapeRight)) {
NSLog(@\"Orientation: Landscape\");
}
else{
NSLog(@\"Orientation: Portrait\");
}
}
日志说如果我在横向模式下启动,它处于“横向”模式,但是如果我将选项卡更改为另一个模式,则看起来很糟糕,因为视图以纵向模式显示。
回到我要求定向的开始视图时,日志显示\“ Portrait \”…,但是模拟器仍然是横向的!
我不知道为什么开始时方向是纵向,…
即使我从风景开始...
任何想法如何解决这个问题?
解决方法
好。因此,文档说“ 3”在所有动画之前都被调用。当您的应用启动时,其初始方向为
Portrait
。根据您的方向,然后旋转到该方向。由于它动画于屏幕外的方向,因此必须在viewWillAppear:
之后调用/,因此当调用viewWillAppear:
时,它仍位于Portrait
中。我自己测试过。
,我解决了问题!
只需在我所有视图的viewWillAppear方法中使用此方法,即可使其在横向模式下启动时起作用:
if(([[UIApplication sharedApplication]statusBarOrientation] == UIInterfaceOrientationLandscapeLeft) || ([[UIApplication sharedApplication]statusBarOrientation] == UIInterfaceOrientationLandscapeRight)){
//Landscape View
}
else{
//Portrait View
}
对我来说很好!