iOS 屏幕旋转

转载 2013年12月03日 16:21:51

参考文献  http://blog.csdn.net/jaywon/article/details/8208991

在iOS6之前的版本中,通常使用 shouldAutorotateToInterfaceOrientation 来单独控制某个UIViewController的方向,需要哪个viewController支持旋转,只需要重写shouldAutorotateToInterfaceOrientation方法。

但是iOS 6里屏幕旋转改变了很多,之前的 shouldAutorotateToInterfaceOrientation 被列为 DEPRECATED 方法,查看UIViewController.h文件也可以看到:

// 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);


除了重写方法,IOS6里面要旋转还有一些需要注意的地方,下面会细述。另外还有一个硬性条件,需要在Info.plist文件里面添加程序支持的所有方向,可以通过以下2种方式添加(ios7 中的info.plist已经自己添加了,不用再添加了)

1.



2.


另外要兼容IOS6之前的系统,要保留原来的 shouldAutorotateToInterfaceOrientation 方法,还有那些 willRotateToInterfaceOrientation 等方法。

IOS6自动旋转设置:

UIViewController *viewCtrl = [[UIViewController alloc] init];
UINavigationController *navCtrl = [[UINavigationController alloc] initWithRootViewController:viewCtrl];
if ([window respondsToSelector:@selector(setRootViewController:)]) {
	self.window.rootViewController = navCtrl;
        //self.window.rootViewController = viewCtrl;
} else {
	[self.window addSubview:navCtrl.view];
}
(顺便提一下self.window.rootViewController = navCtrl;和[self.window addSubview:navCtrl.view];的区别?4.0之前用[self.window addSubview:self.xxxxController.view];  之后用self.window.rootViewController = xxxxController
)
IOS6里面,控制某个viewController旋转并不是像IOS5或者IOS4一样在这个viewController里面重写上面那2个方法,而是需要在这个viewController的rootViewController(根视图控制器)里面重写( self.window.rootViewController = viewController;在这里面写旋转的方法) 
但是如果你的 self.window.rootViewController = navCtrl; 就需要新建一个UINavigationController的子navigationController的子类
(比如说叫UICustomNavigationController)

 

UICustomNavigationController *customNav = [[UICustomNavigationController alloc] initWithRootViewController:viewCtrl];

// 自定义类中得旋转方法

- (BOOL)shouldAutorotate

{

    return self.topViewController.shouldAutorotate;

}

- (NSUInteger)supportedInterfaceOrientations

{

    return self.topViewController.supportedInterfaceOrientations;

}



下面将要旋转时和旋转时方法

// Notifies when rotation begins, reaches halfway point and ends.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;


// Faster one-part variant, called from within a rotating animation block, for additional animations during rotation.

// A subclass may override this method, or the two-part variants below, but not both.

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)durationNS_AVAILABLE_IOS(3_0);


//判断当前状态[[UIApplication sharedApplicationstatusBarOrientation]

 // return current device orientation.  this will return UIDeviceOrientationUnknown unless device orientation notifications are being generated.

[UIDevice currentDevice].orientation  // 这种方法要旋转,否则直接返回UIDeviceOrientationUnknown


UIDeviceOrientation      是机器硬件的当前旋转方向   这个你只能取值 不能设置

UIInterfaceOrientation   是你程序界面的当前旋转方向   这个可以设置

// iOS 6 之前用于控制屏幕方向的枚举UIInterfaceOrientation

// iOS 6 及之后版本用于控制屏幕方向的枚举UIInterfaceOrientationMask





举报

相关文章推荐

iOS 的旋屏控制技巧

传送门:http://blog.csdn.net/yiyaaixuexi/article/details/8035014 IOS系统共定义了以下七种设备方向:   typedef...

里脊串大神 --- 在开发过程中,有的页面需要横屏,有的不需要, 所以本文带来强制旋转屏幕

如何强制旋转屏幕 前言 如果做过项目中有视频播放的内容 一定遇到过全屏播放视频的需求 一般来说 直接弹出一个modal viewcontroller来全屏播放视频就ok了  但是...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

iOS-屏幕旋转

屏幕旋转

ios--屏幕旋转

横竖屏切换,视图乱了怎么办? 首先,我们必须了解一下下列4种状态,它们被用来描述设备旋转方向: UIInterfaceOrientationLandscapeLef...

iOS 屏幕旋转

参考文章:1 http://blog.csdn.net/jaywon/article/details/8208991                   2 在iOS6之前的版本中,...

iOS屏幕旋转

-(BOOL)shouldAutorotate{ //用来设置当前视图控制器是否支持旋转 return YES; } //设置屏幕旋转方...

iOS屏幕旋转

转自:http://blog.csdn.net/cococoolwhj/article/details/8208991 概述: 在iOS6之前的版本中,通常使用 shouldAutorotat...

ios屏幕旋转

旧项目在iOS6中无法旋转的解决办法 之前做的一个iPad上的app,在最新的sdk下重新编译,出现无法旋转的情况。查看了一些文档,由于iOS6在旋转处理的api有了变化,之前处理旋转的函数...

iOS屏幕旋转

禁止UINavigationController的rootViewController的旋转 参考:disable autorotate on a single UIViewController i...

iOS ----屏幕旋转

[cpp] view plaincopy - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)