http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 1991|回复: 2

[新手开发之旅] 【iOS新手开发之旅】iOS传感器加速计和陀螺仪

[复制链接]
发表于 2018-12-11 15:22:19 | 显示全部楼层 |阅读模式
本帖最后由 竹林风 于 2018-12-11 15:31 编辑

  文章导航  

【iOS新手开发之旅】   http://www.sufeinet.com/thread-24000-1-1.html

iOS中常用的传感器主要有2种

(1)加速计
  • 加速计使用度量单位g,这是重力(gravity)的简称。1g是物体在地球的海平面上收到的下拉力(9.8米/秒)
  • 加速计以相对于自由落体的方式度量加速度。
  • 这意味着如果将iOS设备在能够持续自由落体的地方丢下,在下落过程中,其加速计测量到的加速度将为0g。
  • 另一方面,放在左面上的设备的加速度计测量出的加速度为1g,且方向朝上。


(2)陀螺仪
  • 陀螺仪将报告设备绕x、y、z轴的旋转速度,单位为弧度每秒
  • 2弧度等于1圈,所以陀螺仪返回读数2.0表示设备绕相应的轴每秒旋转一圈


(3)两者的区别
    仅当设备的朝向相对于重力的方向发生变化时,加速计才能检测的到;而无论设备处于什么朝向,只要它在旋转,陀螺仪都能检测的到

主要代码

[Objective-C] 纯文本查看 复制代码
#import <CoreMotion/CoreMotion.h>


#define ACCELEROMETER_UPDATE_INTERVAL 1.0
#define GYRO_UPDATE_INTERVAL 1.0



@interface firstVC (){
    
    UILabel *lbl;
    
    
    CMMotionManager *motionManager;
}

@end

@implementation firstVC

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor yellowColor];
    self.title = @"苏飞论坛";
    
    motionManager = [[CMMotionManager alloc] init];
    [self startAccelerometerSensor];
    [self startGyroSensor];
//    [self startDeviceOrientationChangeListener];
    
}

//加速计
-(void)startAccelerometerSensor {
    //更新时间间隔
    motionManager.accelerometerUpdateInterval = ACCELEROMETER_UPDATE_INTERVAL;
    //开始获取数据
    [motionManager startAccelerometerUpdates];
    
    //(1)使用”定时器“(NSTimer)获取数据
    [NSTimer scheduledTimerWithTimeInterval:ACCELEROMETER_UPDATE_INTERVAL target:self selector:@selector(accelerometerDidUpdate) userInfo:nil repeats:YES];
    
    //(2)将数据传递给“操作队列”(NSOperationQueue)
    NSOperationQueue *operationQueue = [NSOperationQueue currentQueue];
    [motionManager startAccelerometerUpdatesToQueue:operationQueue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
        CMAcceleration acceleration = accelerometerData.acceleration;
        NSLog(@"加速计acceleration (%lf,%lf,%lf)", acceleration.x, acceleration.y, acceleration.z);
    }];
    
    //[motionManager stopAccelerometerUpdates];
}

- (void)accelerometerDidUpdate {
    CMAcceleration acceleration = motionManager.accelerometerData.acceleration;
    NSLog(@"acceleration (%lf,%lf,%lf)", acceleration.x, acceleration.y, acceleration.z);
}

//陀螺仪
-(void)startGyroSensor {
    //首先需要判断陀螺仪是否可用,因为2010年以前的设备是没有“陀螺仪”的
    if(motionManager.gyroAvailable) {
        //更新时间间隔
        motionManager.gyroUpdateInterval = GYRO_UPDATE_INTERVAL;
        //开始获取数据
        [motionManager startGyroUpdates];
        //(1)使用”定时器“(NSTimer)获取数据
        [NSTimer scheduledTimerWithTimeInterval:GYRO_UPDATE_INTERVAL target:self selector:@selector(gyroDidUpdate) userInfo:nil repeats:YES];
        
        //(2)将数据传递给“操作队列”(NSOperationQueue)
        NSOperationQueue *operationQueue = [NSOperationQueue currentQueue];
        [motionManager startGyroUpdatesToQueue:operationQueue withHandler:^(CMGyroData * gyroData, NSError * error) {
            CMRotationRate rotationRate = gyroData.rotationRate;
            NSLog(@"陀螺仪gyro (%lf,%lf,%lf)", rotationRate.x, rotationRate.y, rotationRate.z);
        }];
        
        //[motionManager stopGyroUpdates];
    } else {
        NSLog(@"gyro not available");
    }
}


-(void)gyroDidUpdate {
    CMRotationRate rotationRate = motionManager.gyroData.rotationRate;
    NSLog(@"gyro (%lf,%lf,%lf)", rotationRate.x, rotationRate.y, rotationRate.z);
}

运行:

38E474B7-6C2F-451E-84F2-700A76FB75B5.png


下一篇  CoreLocation定位


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2018-12-11 15:22:20 | 显示全部楼层
需要注意的是:模拟器是无法对传感器进行测试的,所以请使用真机运行以上代码
发表于 2018-12-16 22:26:39 | 显示全部楼层
强烈支持楼主ing……
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-27 09:12

© 2014-2021

快速回复 返回顶部 返回列表