MotionManager 陀螺仪实现方式

题外话:

权利的游戏开播了,引用一句话:

布兰:一个人如果还把,他还能勇敢么?

奈德:人在害怕时候的勇敢,才是真的勇敢。

回归正题:

说下关于 CMMotionManager 这个场景的应用吧,微信小视频不知道大家用过没,无论你横着录,还是竖着录,或者反着拿手机录视频,都会自动转成 正常录视频的样子(影像不会翻转),这种方式主要是通过陀螺仪的方式来实现。大家可以了解一下陀螺仪的声明方法,来仿照微信做一个腾讯小视频的录制功能。

陀螺仪代码如下:

#import <CoreMotion/CoreMotion.h>

CMMotionManager *motionManager = [[CMMotionManageralloc] init];
NSOperationQueue *queue = [[NSOperationQueuealloc] init]; //[NSOperationQueue currentQueue]
// 加速计
if (motionManager.accelerometerAvailable) {
    motionManager.accelerometerUpdateInterval = 1.f;
    motionManager.gyroUpdateInterval = 1.f;
    [motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
        if (error) {
            [motionManager stopAccelerometerUpdates];
            NSLog(@"error: %@", error);
        }
        else {
            NSLog(@"x--> %f\n y--> %f\n z--> %f\n",
                  accelerometerData.acceleration.x,
                  accelerometerData.acceleration.y,
                  accelerometerData.acceleration.z);
           
            [self hanldeAccelertionData:accelerometerData.acceleration];
        }
    }];
}
else {
    NSLog(@"This device has no accelerometer");
}

- (void)hanldeAccelertionData:(CMAcceleration)acceleration
{
    UIInterfaceOrientation orientationNew;
   
    if (acceleration.x >= 0.75) {
        orientationNew = UIInterfaceOrientationLandscapeLeft;
    }
    elseif (acceleration.x <= -0.75) {
        orientationNew = UIInterfaceOrientationLandscapeRight;
    }
    elseif (acceleration.y <= -0.75) {
        orientationNew = UIInterfaceOrientationPortrait;
    }
    elseif (acceleration.y >= 0.75) {
        orientationNew = UIInterfaceOrientationPortraitUpsideDown;
    }
    else {
        // Consider same as last time
        return;
    }
   
    IDSLOG(@"orientationNew: %ld", (long)orientationNew);
   
    if (orientationNew == orientationLast) {
        return;
    }
   
    orientationLast = orientationNew;
}

明天我会把 腾讯 微视频的代码分享给大家,其中录制方向使用陀螺仪来实现。

时间: 2024-08-02 11:00:26

MotionManager 陀螺仪实现方式的相关文章

iOS开发传感器相关

手机里面内置了很多的传感器,例如:光传感器,湿度传感器,温度传感器,距离传感器等等 //开发传感器相关的东西必须使用真机 //在螺旋仪和加速计所有两种方式push和pull的方式,push的方式是时时检测,pull的方式是需要时获取检测值 /* 加速计push的使用步骤: 1.创建运动管理者 _mgr = [[CMMotionManager alloc] init]; 2.判断手机加速计是否可用 if (!self.mgr.isAccelerometerAvailable) { NSLog(@"

第六章:加速计与陀螺仪

iOS系统提供了加速计和陀螺仪支持,如果iOS设备提供了这些硬件支持,iOS即可通过CoreMotion框架提供的加速计来获取设备当前的加速度数据.陀螺仪数据.所处的磁场以及设备的方位等信息: 对于iOS应用开发者来说,开发传感器应用十分简单,CoreMotion框架的核心API是CMMotionManager,开发者只要创建一个CMMotionManager对象,接下来即可采用定时器周期性地从CMMotionManager对象获取加速度数据.陀螺仪数据等,也可采用基于代码块的方式来获取这些数据

iOS开发-CoreMotion框架(加速计和陀螺仪)

CoreMotion是一个专门处理Motion的框架,其中包含了两个部分加速度计和陀螺仪,在iOS4之前加速度计是由UIAccelerometer类来负责采集数据,现在一般都是用CoreMotion来处理加速度过程,不过由于UIAccelerometer比较简单,同样有人在使用.加速计由三个坐标轴决定,用户最常见的操作设备的动作移动,晃动手机(摇一摇),倾斜手机都可以被设备检测到,加速计可以检测到线性的变化,陀螺仪可以更好的检测到偏转的动作,可以根据用户的动作做出相应的动作,iOS模拟器无法模拟

iOS中 陀螺仪/极速器 韩俊强的博客

引进框架: #import <CoreMotion/CoreMotion.h> 定义属性初始化相关: #import "ViewController.h" #import <CoreMotion/CoreMotion.h> @interface ViewController () @property (nonatomic, strong) CMMotionManager *motionManager; @property (nonatomic, strong)

iOS学习笔记34-加速计和陀螺仪

一.CoreMotion框架介绍 我们知道有一些iOS的应用,会有一些特殊的要求,比如: 1. 电子罗盘指南针之类的应用:让我们知道方向. 2. 运动类型软件:让我们知道我们跑步多少公里. 3. 社交软件中的摇一摇功能. 4. 游戏中扮演角色类中根据设备的晃动等进行操作. 其实,他们多半是使用了iOS中的一个核心运动框架CoreMotion.framework 使用iOS提供给我们的CoreMotion框架,主要是为了访问加速度计和陀螺仪的相关数据. 它不仅仅提供给你获得实时的加速度值和旋转速度

加速计与陀螺仪

设备静止时受到的地球引力为1g,1g是物体在地球的海平面上受到的下拉力(9.8米/秒2).假如设备从高处掉落,其加速计测量到的加速度将为0g.假如设备水平放在桌面上,则加速计测量出的加速度为1g,且方向朝上. 加速计测量3个轴(x.y和z)上的值,如图所示: 这个轴在方向上有些不同于传统坐标轴,考虑以下实际情况: 1g重力的分布情况是:y=-1.0 1g重力的分布情况是:x=1.0 1g重力的分布情况是:z=-1.0 1g重力的分布情况是:x=0.5,y=-0.5 1g重力的分布情况是:y=-0

[Xcode10 实际操作]九、实用进阶-(9)陀螺仪设备的使用

本文将演示陀螺仪设备的使用. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 1 import UIKit 2 //导入需要用到的CoreMotion框架 3 //该框架不仅提供实时的加速度值,还提供设备的三维姿态信息. 4 import CoreMotion 5 6 class ViewController: UIViewController { 7 8 //添加一个属性,该属性是框架提供的一个运动管理类. 9 //然后由这个类,去管理三种和运动相关的数据封

ios中陀螺仪CoreMotion的用法

转自:http://code.eoe.cn/471/title/ios涓檧铻轰华CoreMotion鐨勭敤娉 README.md 外部引用 原始文档 以前在iphone中要得到加速度时,只能使用Accelerometer模块得到重力加速度分量,然后通过滤波得到加速度值.其实在ios中有一个陀螺仪模块,CoreMotion,使用更方便. deviceMotion.m 外部引用 原始文档 //初始化CoreMotion #import CMMotionManager *motionManager

ios开发——实用技术篇Swift篇&amp;加速计和陀螺仪

加速计和陀螺仪 1 //返回按钮事件 2 @IBAction func backButtonClick() 3 { 4 self.navigationController?.popViewControllerAnimated(true) 5 } 6 7 8 @IBOutlet var xLabel:UILabel! 9 @IBOutlet var yLabel:UILabel! 10 @IBOutlet var zLabel:UILabel! 11 12 @IBOutlet var orient