本文共 1498 字,大约阅读时间需要 4 分钟。
相信大家都知道,ios6并不支持 shouldAutorotateToInterfaceOrientation 而强制打开项目的所有方向旋屏,会给一部分项目带来不便,
这个问题源于我以前的程序,都是在shouldAutorotateToInterfaceOrientation来判断当前的朝向,从而决定界面的布局,但是由于这个方法在ios6上不再调用,所以会出现ios6上无法旋转,且如果你之前的程序只支持横屏的话,在ios6上运行,会出现只能竖屏,并能以竖屏的方式显示以前横屏的内容。这时你会看到界面被切割,难看得你想骂人(如果你是用户的话)。
特别是rootController是横屏的情况下,如果纵向放置会出现明显的错位,这点在ios5会出现,ios6系统自动检测了,这里简单介绍下我的处理方法:
第二步:在项目的AppDelegate文件加入 (其实我在试验中发现这步可有可无,当然也有可能我没有发现其重要性。)
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
return UIInterfaceOrientationMaskAll;
}
第三步:在只需要横屏的控制器内添加
// ios5下的旋屏
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
// ios6下的旋屏
-(BOOL)shouldAutorotate {
return YES;
}
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
在需要全方位旋屏的控制器内添加
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return YES;
}
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAll;
}
-(BOOL)shouldAutorotate {
return YES;
}
说明:1。如果没有在AppDelegate声明项目方向,在控制器旋屏情况下有时候会卡屏,选不过来,而且会有严重的错位。(但这个问题我目前还没有发现)
2。注意其中shouldAutorotateToInterfaceOrientation()中的参数是UIInterfaceOrientationPortrait, 而-(NSUInteger)supportedInterfaceOrientations {}, 返回的参数是
UIInterfaceOrientationMaskPortrait类型的,我之前就是因为把这两个类型搞混了,所以才费了半天劲最终找到问题的原因。希望对大家有所帮助。
转载地址:http://rhwpi.baihongyu.com/