在我的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替代。
总结以上是内存溢出为你收集整理的addSubview导致的旋屏问题:shouldAutorotateToInterfaceOrientation方法不调用全部内容,希望文章能够帮你解决addSubview导致的旋屏问题:shouldAutorotateToInterfaceOrientation方法不调用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)