您的位置:首页 > 其它

addSubview导致的旋屏问题:shouldAutorotateToInterfaceOrientation方法不调用

2012-01-06 09:15 453 查看
在我的app中,有一个登录页面ViewController,我在其中实现了shouldAutorotateToInterfaceOrientation方法,让它支持自动旋屏:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return interfaceOrientation == UIInterfaceOrientationPortrait ||
interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown;
}
这个方法工作得很好,当屏幕从正向模式旋转到倒置人像模式时,View Controller如预期旋转。
当登录完成,我用以下代码显示另一个View Controller:
iPadMainVC *mainVC=[[iPadMainVC alloc]initWithNibName:@"iPadMainVC"
bundle:nil];
UINavigationController *nController = [[UINavigationController alloc]initWithRootViewController:mainVC];

[nController setNavigationBarHidden:YES animated:NO];

self.view.window.rootViewController = nController;
在这个View Controller(iPadMainVC)中,我把前面的shouldAutorotateToInterfaceOrientation方法代码复制粘贴进去了。
然而,当iPad旋转时,除了视图第1次load时以外,shouldAutorotateToInterfaceOrientation方法不会被调用。
我添加了一些打印语句在该方法中进行debug:
if (interfaceOrientation== UIDeviceOrientationPortrait) NSLog(@"Up");
if(interfaceOrientation == UIDeviceOrientationPortraitUpsideDown) NSLog(@"Down");
程序运行时,在登录完成,刚刚进入iPadMainVC视图的时候,shouldAutorotate方法会调用3次:
[11567:207] Up
[11567:207] Up
[11567:207]Up
此后无论你怎样旋转屏幕,shouldAutorotate方法都不会调用了。
我查到有的资料说,“
shouldAutorotateToInterfaceOrientation
doesn't work well if you are using
[someViewaddSubview]
”(使用addSubview方式添加的ViewController,shouldAutorotate方法不能正常工作)。
如果是这样,那么我原来的View Controller(登录页面)就是用addSubview添加的:
⋯⋯
[window addSubview:rootController.view];
[window makeKeyAndVisible];
⋯⋯
我需要把它修改为:
⋯⋯
window.rootViewController=rootController;
⋯⋯
这样,shouldAutorotate方法才能很好地工作。
结论
这样,如果要在程序中很好地支持旋屏,尽量不要使用addSubview方式切换视图。我们可以用popoverViewController或presentModalViewController替代。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐