不同根视图下控制部分屏幕旋转(tabbarController/navigationController)
来源:互联网 发布:进销存系统数据库设计 编辑:程序博客网 时间:2024/06/06 23:50
部分转自:http://blog.csdn.net/ioswyl88219/article/details/24711197
系统支持横屏顺序
默认读取plist里面设置的方向(优先级最高)等同于Xcode Geneal设置里面勾选
application window设置的级别次之
然后是UINavigationcontroller
级别最低的是viewcontroller
以下三条式子为控制屏幕翻转的核心代码
- (BOOL)shouldAutorotate//是否支持旋转屏幕{ return YES;}- (NSUInteger)supportedInterfaceOrientations//支持哪些方向{ return UIInterfaceOrientationMaskPortrait;}- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation//默认显示的方向{ return UIInterfaceOrientationPortrait;}
只要在plist或者General设置了单一方向,在工程里面的任何代码都会失效。所以想要旋转屏幕,必须让你的工程支持所旋转的方向。(但是这里还有一种方式是把当前控制器的View或者view.layer做transform旋转,但是我认为这并不是真正的旋转屏幕,一点可以证明的就是:状态条并不随着旋转)其实这个优先级跟你的window的rootViewcontroller有关系,如果rootViewcontroller是UITabbarViewontroller,那么tabbar就类似前面所说的UINavigationcontroller,在iOS6之后好多方法发生了改变,之前的一个屏幕旋转的方法就失效了,更改位上面的方法。
其实屏幕旋转在手机里面有设置,上拉菜单就会有关闭屏幕旋转的方式,但是大家都知道好多应用在关闭屏幕旋转的时候也可以进行屏幕旋转---通过某一个按钮的事件来触发,这就是强制旋转(前提依然是你的工程设置支持你所要旋转的方向)
屏幕设置为
在info.plist文件中将 View controller-based status bar appearance
设置为NO
在application:didFinishLaunchingWithOptions:
中添加下面代码
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
如此之后你就会发现消失的状态条有乖乖的回来了。
设置部分屏幕旋转:
根视图控制器为NavigationController
创建继承NAV的类
- (BOOL)shouldAutorotate { //允许选择的视图控制器 if ([NSStringFromClass([self.visibleViewController class]) isEqualToString:@"CCViewController"]) { return YES; } return NO; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAllButUpsideDown; }
根视图控制器为TabBarController
创建NavigationController和TabBarVontroller的category
这里注意不能在tabbarcontroller的类里写旋转方法 否则以下方法会无效
#import UITabBarController+autoRotate.h
#import <UIKit/UIKit.h>@interface UITabBarController (autoRotate)-(BOOL)shouldAutorotate;-(NSUInteger)supportedInterfaceOrientations;@end
#import "UITabBarController+autoRotate.h"@implementation UITabBarController (autoRotate)-(BOOL)shouldAutorotate{ return [self.selectedViewController shouldAutorotate];}-(NSUInteger)supportedInterfaceOrientations{ return [self.selectedViewController supportedInterfaceOrientations];}@end
@interface UINavigationController (autoRotate)-(BOOL)shouldAutorotate;-(NSUInteger)supportedInterfaceOrientations;@end
在这里写上需要部分允许旋转的视图控制器
-(BOOL)shouldAutorotate{ if ([NSStringFromClass([self.visibleViewController class])isEqualToString:@"PicShowViewController"]) { return YES; }// return [self.visibleViewController shouldAutorotate]; return NO;}-(NSUInteger)supportedInterfaceOrientations{ return [self.visibleViewController supportedInterfaceOrientations];}
监听设备旋转
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(onDeviceOrientationChange) name:UIDeviceOrientationDidChangeNotification object:nil];
-(void)onDeviceOrientationChange{ UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; if (UIDeviceOrientationIsLandscape(orientation)) { [self.view setNeedsLayout]; [self.view layoutIfNeeded]; }else if (orientation==UIDeviceOrientationPortrait){ [self.collectionView reloadData]; [self.view setNeedsLayout]; [self.view layoutIfNeeded]; }}
0 0
- 不同根视图下控制部分屏幕旋转(tabbarController/navigationController)
- iOS navigationController中回到tabbarController根视图方法
- 当rootViewController为tabbarController时,控制屏幕旋转的方法
- 当rootViewController为tabbarController时,控制屏幕旋转的方法
- TabBarController+NavigationController 结构隐藏
- TabBarController和NavigationController并存
- 九十五、iphone屏幕旋转、改变 视图尺寸 和 布局控制
- [IOS] 屏幕旋转控制
- android 屏幕旋转控制
- ios控制屏幕旋转
- Android屏幕旋转控制
- iOS 屏幕旋转控制
- 屏幕的旋转控制
- iOS 屏幕旋转控制
- iOS控制屏幕旋转
- 创建TabBarController中包含NavigationController
- swift TabBarController内部控制的viewController视图被tabbar遮挡
- 视图控制器和屏幕旋转
- 新计划
- 怎么用网盘查找资源
- Chapter 9: Mixture Models and EM
- TIJ_字符串
- LCD 调试问题总结
- 不同根视图下控制部分屏幕旋转(tabbarController/navigationController)
- 337. House Robber III
- STM32F105的时钟配置
- 在Windows下用C语言实现屏幕取色
- ES6学习笔记(三)字符串的扩展
- Eclipse无法启动报An internal error occurred during: "reload maven project". java.lang.NullPointerExceptio
- Head First Design Patterns 阅读笔记之五: Singleton Pattern
- effective stl 第30条:确保目标区间足够大
- mybatis插入返回自增