zoukankan      html  css  js  c++  java
  • 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 y--> %f z--> %f ",
                      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;
    }
     
    明天我会把 腾讯 微视频的代码分享给大家,其中录制方向使用陀螺仪来实现。
     
     
     
     
     
     
  • 相关阅读:
    INTERVAL YEAR TO MONTH数据类型
    Oracle 中DATE类型的计算
    Oracle中特殊的变量类型
    Webview窗口设置遮罩层
    mui.init方法配置
    mui.fire()触发自定义事件
    管理员启动程序的命令
    收藏网址
    html标签
    Event对象和触发
  • 原文地址:https://www.cnblogs.com/firstrate/p/7214597.html
Copyright © 2011-2022 走看看