首页 > 代码库 > MotionManager 陀螺仪实现方式

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 陀螺仪实现方式