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

简介:

前言

    这两天在学关于屏幕旋转的相关的知识,也延伸出了加速器和陀螺仪这些以前没有深入去学习过的知识点,在没有仔细看之前也有一些问题在想,比如;用户关闭了手机的屏幕旋转,但根据我们的使用经验,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 ,如需转载请自行联系原作者





相关文章
|
8月前
|
传感器 Java Android开发
Android 中屏幕进行横屏显示和竖屏显示的方法
Android 中屏幕进行横屏显示和竖屏显示的方法
424 0
获取Activity当前屏幕方向。
获取Activity当前屏幕方向。
115 0
|
传感器 Java Android开发
android设置横屏和竖屏的方法
android设置横屏和竖屏的方法
1006 0
|
缓存 Android开发 数据安全/隐私保护
Android 悬浮窗、悬浮球开发
原文:Android 悬浮窗、悬浮球开发 1、权限管理 直接看我另外一篇博客吧,传送门: https://my.
1775 0
|
XML Android开发 数据格式
Android标题栏随着滑动显示隐藏
这次实现标题栏随着上滑下滑显示隐藏 实现这个效果需要,Support Design库中的CoordinatorLayout和AppBarLayout进行配合才行。
3238 0
|
Android开发 数据格式 XML
Android竖屏模式实现横屏效果
android横竖屏切换是非常耗时间的,而且切换的过程也会存在明显的翻转卡顿效果,那么是否可以在竖屏模式下实现横屏的效果呢?答案是肯定的,这里提供一种方法,其思路是对view进行90度的旋转,而且实现起来非常简单,其效果图如下: 首先我们先在layout里排版出一个水平的布局,如下图: 是不是很简单?布局代码如下: &lt;?xml version="1.0" enco
2910 0
|
Android开发 Java 传感器
Android 设置 横屏 竖屏
方法一:在AndroidManifest.xml中配置 如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数: "unspecified":默认值 由系统来判断显示方向.
927 0
|
Android开发
android横竖屏切换activity生命周期变化
1、新建一个Activity,并把各个生命周期打印出来 2、运行Activity,得到如下信息 onCreate--&gt; onStart--&gt; onResume--&gt; 3、按crtl+f12切换成横屏时 onSaveInstanceState--&gt; onPause--&gt; onStop--&gt; onDestroy--&gt
938 0