MotionManager 陀螺仪实现方式

Posted 旅途

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}
 
明天我会把 腾讯 微视频的代码分享给大家,其中录制方向使用陀螺仪来实现。
 
 
 
 
 
 

以上是关于MotionManager 陀螺仪实现方式的主要内容,如果未能解决你的问题,请参考以下文章

手机陀螺仪的应用

手机的陀螺仪怎么使用?

Gyro 在 Cocos2D 环境中不工作

STM32实现六轴姿态测量陀螺仪模块JY61P(标准库与HAL库实现)

STM32实现六轴姿态测量陀螺仪模块JY61P(标准库与HAL库实现)

R6093U陀螺仪数据的读取和处理方式(基于STC15W)