屏幕方向该知道的那些事儿

iOS屏幕旋转实战

前言

    这两天在学关于屏幕旋转的相关的知识,也延伸出了加速器和陀螺仪这些以前没有深入去学习过的知识点,在没有仔细看之前也有一些问题在想,比如;用户关闭了手机的屏幕旋转,但根据我们的使用经验,APP的界面还是可以旋转的,比如那些视屏播放类型的APP,还是可以全屏观看视频的,那这些是怎么做的?还有比如 你整个项目不允许横屏展示的,而某一个控制器却单独要求横屏展示,这个又该怎么做?用户关闭了手机屏幕旋转,我们还能不能判断手机屏幕的方向?带着这些问题我们一个一个的说一下屏幕方向的那些事儿。

 


 

用户关闭了手机屏幕旋转怎么办?

       这个我们也就从简单点的说起吧,说个简单的需求,用户把手机屏幕旋转关闭了,我们还有一个播放器界面还是需要横屏显示,我们该怎么办?先说简单的,我们有一个全屏的点击按钮,点击了按钮之后界面横屏。看代码解释,按钮的和点击事件就不写了,直接到重点:

1
2
3
// UIInterfaceOrientationLandscapeLeft 向左横置,具体向右或者向左的值自己取出来。
NSNumber  *value = [ NSNumber  numberWithInt:UIInterfaceOrientationLandscapeLeft]; 
[[UIDevice currentDevice] setValue:value forKey:@ "orientation" ];

    点击按钮,这个界面就变成了相应横屏的模式!其实这里也会相应的启发到你,那整个APP不允许旋转,唯独这一个界面要能横屏该怎么做?就简单了。这个任务就交给你实践了,要觉得不行,你再给留言或者加我QQ联系我! 

 

CoreMotion.frameWork 主角该登场了!

        这个框架就是处理加速器和陀螺仪的东西!先添加到自己的项目里面,导入系统头文件

     #import <CoreMotion/CoreMotion.h> 

     iOS 开发----CMDeviceMotion陀螺仪的使用    iOS学习笔记34 - 加速计和陀螺仪

     先把我的学习链接给大家,感谢作者!

     至于陀螺仪和加速器是什么,这个我就不再描述了。原理大家可以看上面给的学习链接!说说怎么用它们判断手机屏幕的方向!看代码解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
- ( void )zxMotionManager{
     if  (_motionManager ==  nil ) {
         _motionManager = [[CMMotionManager alloc] init];
     }
     if  ([_motionManager isGyroAvailable]) {
         // deviceMotion 加速器和陀螺仪的复合型数据
         _motionManager.deviceMotionUpdateInterval = 0.01f;
         [ self .motionManager startDeviceMotionUpdatesToQueue:[ NSOperationQueue  mainQueue] withHandler:^(CMDeviceMotion * _Nullable motion,  NSError  * _Nullable error) {
          [ self  performSelectorOnMainThread: @selector (handleDeviceMotion:) withObject:motion waitUntilDone: YES ];
        }];
       }
      else
      {     
            NSLog (@ "陀螺仪/加速器不可用" );
            [ self  setMotionManager: nil ];
      }
}
 
- ( void )handleDeviceMotion:(CMDeviceMotion *)deviceMotion{
     double  x = deviceMotion.gravity.x;
     double  y = deviceMotion.gravity.y;
     if  (fabs(y) >= fabs(x))
     {
         if  (y >= 0){
             NSLog (@ "屏幕直立,上下顛倒" );
         }
         else {
              NSLog (@ "屏幕直立" );
         }
     }
     else
     {
         if  (x >= 0){
             NSLog (@ "屏幕向右橫置" );
         }
         else { <br>              NSLog (@ "屏幕向左横置" );
         }
     }
}

你在你需要的地方去调用 zxMotionManager 方法就能够判断出手机屏幕的方向,就算是用户关闭了手机旋转按钮!!

http://www.cnblogs.com/taoxu/p/5765066.html

http://www.jianshu.com/p/692e7a490747
















本文转自ljianbing51CTO博客,原文链接:http://blog.51cto.com/ljianbing/1860926 ,如需转载请自行联系原作者





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值