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适应屏幕旋转的悬浮窗

  • 2016年07月22日 17:20
  • 129KB
  • 下载

iOS 屏幕旋转 及注意事项

一、屏幕旋转机制:    iOS通过加速计判断当前的设备方向和屏幕旋转。当加速计检测到方向变化的时候,屏幕旋转的流程如下:   1、设备旋转时,系统接收到旋转事件。   2、系统将旋...

iOS(iPhone/iPad) 屏幕旋转响应函数的缺点与窗口大小位置调整,以及解决办法

1,UIViewController响应屏幕旋转的缺点: (1)旋转之前响应的操作缺点: - (void)willRotateToInterfaceOrientation:(UIInterfa...
  • H_O_W_E
  • H_O_W_E
  • 2013年05月07日 17:31
  • 2604

IOS&Android通用屏幕控制(移动旋转缩放)

IOS&Android通用屏幕控制(移动旋转缩放)PS:我试过LeanTouch上的旋转缩放只能在android上使用在IOS上就没效果了,淡然你也可以用EasyTouch等做屏幕控制...

iOS屏幕横竖屏旋转相关

iOS8之后的屏幕旋转和iOS6,7有很大不同,项目中自己之前遇到过这样的需求,从A界面呈现B界面,如果A横屏则呈现出的B也为横屏,如果A竖屏则呈现出的B也为竖屏,实现代码如下: //当前屏幕高...

ios屏幕的旋转,Device Orientation

Orientation指的是ios设备根据重力感应

IOS开发 - 屏幕旋转

全局控制: 你的应用是否支持屏幕旋转需要一个全局的配置,在 AppDelegate 中有这样一个方法,这个方法返回你的app支持屏幕旋转的全局配置,当某一个viewController要判断是否旋转自...

iOS开发中,单个页面屏幕旋转问题

在开发中,有时整个项目不支持横屏,但是在某个页面的时候(比如打开地图)我们需要做一些调整。首先,在iOS的UI控件中有一个transform的属性,这个属性就能帮我解决问题。 比如我们双击某个页面,...

玩转iOS屏幕旋转

此博文主要针对IOS应用, 是屏幕旋转相关问题的一个总结. 主要内容有: IOS5,6,7不同版的适配.强制旋转和自动旋转. 改变Orientation的三种途径 这里,...

iOS屏幕旋转

禁止UINavigationController的rootViewController的旋转 参考:disable autorotate on a single UIViewController i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 屏幕旋转
举报原因:
原因补充:

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