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屏幕旋转的检测 与 强行切换

[[UIDevice currentDevice]setValue:[NSNumber numberWithInteger:sender.selected?UIDeviceOrientationLan...
  • Goods_boy
  • Goods_boy
  • 2017年05月22日 22:41
  • 473

iOS 屏幕旋转问题总结

1、两个Orientation1.1设备的物理方向(UIDeviceOrientation) typedef NS_ENUM(NSInteger, UIDeviceOrientation) { ...
  • sinat_29301173
  • sinat_29301173
  • 2017年02月24日 12:16
  • 931

iOS监听屏幕旋转的几种方法

通过控制器得到 //获取将要旋转的状态 -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrien...
  • xuanai_xue123
  • xuanai_xue123
  • 2016年09月22日 09:29
  • 4899

ios(ipad,iphone)屏幕旋转检测通用方法

在特别的场景下,需要针对屏幕旋转作特殊处理。在ios系统下实现相关的功能还是比较方便的。 我下面介绍两种方法: 1.注册UIApplicationDidChangeStatusBarOrienta...
  • openglnewbee
  • openglnewbee
  • 2014年10月23日 21:26
  • 17625

iOS之屏幕旋转调用的方法

屏幕旋转调用的方法
  • u011146511
  • u011146511
  • 2016年05月12日 01:19
  • 1876

详解iOS开发中处理屏幕旋转的几种方法

前言: 最近在写PhotoBrowser的时候, 发现浏览图片的时候需要适配屏幕的旋转.于是研究一下, 发现有几种处理方法和一些注意点. 我们希望在屏幕旋转的时候,界面的布局能够相应的变化来适配新的布...
  • zerojswift
  • zerojswift
  • 2016年05月25日 20:20
  • 6610

iOS屏幕旋转设置

在XCode中可以设置App支持的旋转方向。如图所示:         项目中定义了可以支持竖屏(home键在下方),以及横屏的旋转。如果你想让你的App不能旋转,只能竖屏显示,那取消LandS...
  • CDUT100
  • CDUT100
  • 2015年10月09日 15:39
  • 683

[iOS]监控屏幕旋转

[iOS]监控屏幕旋转 - (void)viewDidLoad { [super viewDidLoad]; //设备旋转通知 [[UIDevice current...
  • u012881779
  • u012881779
  • 2016年03月07日 17:43
  • 1417

iOS中关闭屏幕旋转功能时如何判断屏幕方向

首先讲强制横屏和竖屏,其实很少App需要强制转屏的,一般在视频播放,相机这类需要旋转屏幕 (1)这段代码是直接横屏 (interfaceOrientation 这个枚举有各种情况) // 视图...
  • u012121216
  • u012121216
  • 2015年11月10日 14:17
  • 1072

监听iOS检测屏幕旋转状态,不需开启屏幕旋转

-(void)rotation_icon:(float)n { UIButton *history_btn= [self.view viewWithTag:][self.view viewWit...
  • linqir
  • linqir
  • 2014年02月27日 14:26
  • 8364
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 屏幕旋转
举报原因:
原因补充:

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