关于iOS 6 部分UIViewController 转屏问题
来源:互联网 发布:怎么在淘宝上开书店 编辑:程序博客网 时间:2024/06/04 18:07
最近做一个项目 需要在UINavigationController下部分UIViewController 支持转屏功能。搜集了一下iOS 关于转屏的API:
// Applications should use supportedInterfaceOrientations and/or shouldAutorotate..- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation NS_DEPRECATED_IOS(2_0, 6_0);// New Autorotation support.- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0);- (NSUInteger)supportedInterfaceOrientations NS_AVAILABLE_IOS(6_0);// Returns interface orientation masks.- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation NS_AVAILABLE_IOS(6_0)
根据以往的经验,在iOS6以下的系统中,我们只需要实现:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation这个方法,然后在不同的UIViewController 实现不同的转屏方向:
// Note that UIInterfaceOrientationLandscapeLeft is equal to UIDeviceOrientationLandscapeRight (and vice versa).// This is because rotating the device to the left requires rotating the content to the right.typedef NS_ENUM(NSInteger, UIInterfaceOrientation) { UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait, UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight, UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft};注意:UINavigationController 需要在RootViewController中实现该方法才起作用;UITabBarController同理。
而到了iOS 6.0及以上的系统,该方法已经过期,同样需要转屏的话需要现实一下API:
// New Autorotation support.- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0);- (NSUInteger)supportedInterfaceOrientations NS_AVAILABLE_IOS(6_0);
同样需要在UINavigationController 或者 UITabBarController的RootViewController中实现;
但然后在需要转屏的UIViewController 转成与之前UIViewController 转屏方向不同的情况下后退就会出现问题;
必须采用API:
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion NS_AVAILABLE_IOS(5_0);
做到转屏退出以后还是原来的UIViewController 维持原来的转屏方向;
如果想做到无缝UINavigationViewController 的push & pop效果的话:
参考以下代码:
push:
__block PhotoViewController *photoBrowser = [[PhotoViewController alloc] initWithDelegate:self]; photoBrowser.displayActionButton = YES; photoBrowser.isCustom = YES; photoBrowser.galleryItem = myGalleryList_; if([[[UIDevice currentDevice] systemVersion] floatValue] > 5.9){ BlankViewController *blank = [[BlankViewController alloc] init]; UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:blank]; id vController = [[self.navigationController viewControllers] lastObject]; if (vController != self){ [self.navigationController popViewControllerAnimated:NO]; } [self presentViewController:nav animated:NO completion:^{ [nav pushViewController:photoBrowser animated:YES]; [self setHidesBottomBarWhenPushed:YES]; [self.navigationController pushViewController:blank animated:NO]; }]; }else{ [self.navigationController pushViewController:photoBrowser animated:YES]; }
pop:
if ([[[UIDevice currentDevice] systemVersion] floatValue] > 5.9){ if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){ [(UINavigationController *)[(AppDelegate *)fccsDelegate myTabBar].selectedViewController popViewControllerAnimated:NO]; [self dismissViewControllerAnimated:YES completion:^{ }]; }else{ [self dismissViewControllerAnimated:NO completion:^{ [(UINavigationController *)[(AppDelegate *)fccsDelegate myTabBar].selectedViewController popViewControllerAnimated:YES]; }]; } } else { [self.navigationController popViewControllerAnimated:YES]; }
- 关于iOS 6 部分UIViewController 转屏问题
- iOS:关于UIViewController的初始化
- ios 6 UIViewController关于屏幕翻转的控制
- IOS关于UIViewController之间的切换
- IOS关于UIViewController之间的切换
- 关于ios的UIwindows and UIviewcontroller
- iOS-UIViewController
- IOS UIViewController
- ios UIViewController
- IOS UIViewController
- iOS UIViewController
- 『IOS』IOS关于UIViewController之间的切换
- IOS 7 设置某一个UIViewController横屏,其他坚屏的问题
- iOS屏幕(UIViewController)旋转的横竖屏
- IOS--关于UIViewController添加UINavigationBar的详细实现方法
- IOS开发(6)之UIViewController
- iOS 部分问题总结
- iOS 9部分问题
- 在DateTimePicker上显示星期几
- SAP SRM FM 读取附件URL
- 10g OCM考试大纲 (英文版)
- opencv xml
- 太 极 拳 哲 理
- 关于iOS 6 部分UIViewController 转屏问题
- Android图像处理之Bitmap类
- 提高PHP编程效率的53个要点
- oracle手工建库
- wince文件夹操作
- 最长递增子序列 O(nlogn)
- HTTP头入门到精通(每一个HTTP消息头解释)
- mysql数据库的定时任务
- Java面试要点