iOS屏幕旋转总结

一、屏幕旋转检测方法

在特别的场景下,需要针对屏幕旋转作特殊处理。在ios系统下实现相关的功能还是比较方便的。

我下面介绍两种方法:

1、监测状态栏方向

 1 /**
 2  *  当手机屏幕发生左右横屏变化时,我们需根据此时的设备方向做出相应的调整
 3  *  例如,在ViewController中,我们需要监控手机屏幕是否转动了,需要在通知中心中注册通知
 4  */
 5 - (void)viewWillAppear:(BOOL)animated{
 6     [super viewWillAppear:animated];
 7     
 8     //注册通知,监测手机屏幕变化
 9     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarOrientationChange:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
10 }
11 
12 /**
13  *  当手机屏幕发生变化时,会回调下面方法
14  */
15 - (void)statusBarOrientationChange:(NSNotification *)notification{
16     UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
17     
18     if (orientation == UIInterfaceOrientationLandscapeRight)//home键向右
19     {
20         NSLog(@"home键向右");
21     }
22     if (
23         orientation ==UIInterfaceOrientationLandscapeLeft) // home键靠左
24     {
25         NSLog(@"home键向左");
26     }
27     
28     if (orientation == UIInterfaceOrientationPortrait)// home键靠下
29     {
30         NSLog(@"home键靠下");
31     }
32     
33     if (orientation == UIInterfaceOrientationPortraitUpsideDown)// home键颠倒
34     {
35         NSLog(@"home键靠颠倒");
36     }
37 }

Debug时我们发现下面这段代码没有被打印

1 if (orientation == UIInterfaceOrientationPortraitUpsideDown)// home键颠倒
2     {
3         NSLog(@"home键靠颠倒");
4     }

这是因为这种方式监听的是StatusBar也就是状态栏的方向,所以这个是跟你的布局有关的,你的布局转了,才会接到这个通知,而不是设备旋转的通知。

当我们关注的东西和布局相关而不是纯粹设备旋转,我们使用上面的代码作为实现方案比较适合。

2、监控设备物理方向

 1 - (void)viewWillAppear:(BOOL)animated{
 2     [super viewWillAppear:animated];
 3     
 4     //注册通知 监测设备方向的变化
 5     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
 6     
 7 }
 8 
 9 //当设备的物理方向发生变化时会调
10 - (void)orientChange:(NSNotification *)noti{
11     
12     NSDictionary* ntfDict = [noti userInfo];
13     
14     UIDeviceOrientation  orient = [UIDevice currentDevice].orientation;
15     
16     switch (orient)
17     {
18         case UIDeviceOrientationPortrait:
19             NSLog(@"home靠下");
20             break;
21         case UIDeviceOrientationLandscapeLeft:
22             NSLog(@"home靠右边");
23             
24             break;
25         case UIDeviceOrientationPortraitUpsideDown:
26             NSLog(@"home靠上");
27             break;
28         case UIDeviceOrientationLandscapeRight:
29             NSLog(@"home靠左边");
30             break;
31             
32         default:
33             break;
34     }
35 }

 

 

 

posted @ 2016-05-04 17:00  顺手给我new一个对象  阅读(1145)  评论(0编辑  收藏  举报