前言

在iOS开发中,有时候需要检测摇一摇的动作,检测手机是否进行摇一摇,目前主要有两种方法,一个是通过UIResponder中的回调方法,一个是通过加速计进行计算检测。前者相较于后者开发简单,但是有一定的局限性,如计算摇一摇次数误差过大。

通过UIResponder中的回调方法检测摇一摇

如果是简单判断手机是否有摇一摇的动作可以用UIResponder中的几个回调方法进行捕捉动作:- (void)motionBegan:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0);//摇动开始

- (void)motionEnded:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0);

- (void)motionCancelled:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0);

注意:在使用这些方法的时候需要判断一下motion的类型为摇动的类型,如:- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {

if (UIEventSubtypeMotionShake == motion) {

//摇一摇

}

}

二、通过加速计检测摇一摇动作

苹果提供了CoreMotion框架让开发者获取加速计和陀螺仪数据,这里主要介绍如何通过加速计检测摇一摇并计算摇一摇次数。

1、加速计判断摇一摇的思路

加速计的坐标轴如图,是个三维的坐标。

我们需要通过x、y、z三个轴的方向的加速度计算出摇动手机时,手机摇动方向的加速度a。

公式为:

加速计中的单位为:g(重力加速度9.8米/秒)。

接着我们需要设定一个阈值判断是否算为摇一摇的动作,我这里设定的是1.6g,(由于有重力,在手机静止时加速计,依然会有1g的加速度,所以阈值一定要大于1)

当加速度超过1.6g时便可以记录一次摇动,这里要添加一个布尔值isMoving来标记该次摇动是否结束,防止一次摇动记录了多次,但是当低于1.3g后当做这次摇动结束。

2、实现

首先要引入头文件

#import

相关实现代码如下:_motionMgr = [[CMMotionManager alloc] init];

__block BOOL isMoving = NO;

__block int count = 0;

[_motionMgr startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {

CMAcceleration acceleration = accelerometerData.acceleration;

float x = acceleration.x;

float y = acceleration.y;

float z = acceleration.z;

float v = sqrt(x*x + y*y + z*z); //算出实际加速度

if (v > 1.6) {

if (!isMoving) {//次数加1

count++;

}

isMoving = YES;

}else if (v > 1.3){

isMoving = YES;

}else {

isMoving = NO;

}

}];

本文的方案里是简单地通过一个方向的加速度来检测摇一摇,精确度有限,如果要提升精确度有几个优化点:

1、通过加速度乘时间获取位移速度,在本方案的基础上加上位移的判断。

2、减去默认存在的重力加速度(我暂时没找到减去默认存在的重力加速度)。

测试摇一摇次数的软件,iOS通过加速计计算摇一摇次数相关推荐

  1. bugku 管理员系统 后台代码_不会吧,这也行?iOS后台锁屏监听摇一摇

    [toc] 背景介绍 一般情况下,出于省电.权限.合理性等因素考虑,给人的感觉是很多奇怪的需求安卓可以实现,但是iOS就无法实现!今天要介绍的需求也有这种感觉,就是"当 APP 处于后台或锁 ...

  2. 没事摇一摇!小心约炮软件暴露你的工作信息

    本文讲的是没事摇一摇!小心约炮软件暴露你的工作信息,在社交软件兴盛的今天,人们越来越多地采用在线联系的方式来快速寻找"另一半",但是在满足个人欲望的同时,这些约炮软件还能暴露你工作 ...

  3. IOS系统中H5页面实现摇一摇功能

    公司准备开年会了,年会活动用了一套别人的系统,根据测试,有些游戏的摇一摇功能在IOS上无法使用,为了修复该功能,踩了一些坑,特此记录如下: 1. 因为IOS系统的安全要求,项目必须是在https的域名 ...

  4. 有没有测试鼠标是否丢帧的软件,深澜大叔教你如何准确检测鼠标是否丢帧

    之前我写过一篇<如何用扑克牌尽量精准的测试鼠标静默高度LOD>,在这个帖子里我提到了如何尽量手动精准测量鼠标的LOD,提到了一个测试工具,即AresonMouseTestProgram,在 ...

  5. 物联网测试都有哪些挑战,软件检测机构如何保证质量

    当有人问"什么是基本生活必需品"这样的问题时,大多数人会回答"食物.住所.衣服".但是,这是一个世纪之前的情况.人类已经进化到开发出一些额外的生活必需品.我们已 ...

  6. 交换机软件IOS升级更简化了

    交换机软件IOS升级更简化了 6500 交换机升级软件的步骤更简单了,可以不用重启动设备. 对于6500Native IOS双引擎交换机的升级: 1,核实现在的引擎备份方式,如RPR, RPR+,SS ...

  7. android应用启动次数,应用统计: APP启动次数,软件用时统计,用量提醒

    编辑点评 让偷玩手机的孩子无所遁形 应用统计: APP启动次数,软件用时统计,用量提醒 介绍 应用统计: APP启动次数,软件用时统计,用量提醒 应用统计又称屏幕时间,用量分析,时间管理,是一个记录用 ...

  8. 【软件质量保证与测试】2.4软件测试与软件开发的关系

    文章目录 1. 软件测试与软件开发过程关系概述 2. 软件测试在软件开发生命周期中的位置 2.1 软件开发生命周期 2.1.1 软件规划阶段测试 2.1.2 软件设计阶段测试 2.1.3 软件开发阶段 ...

  9. PROGPPCNEXUS读写烧录刷写软件 飞思卡尔MPC55xx/56xx/57xx/58xx 没有次数限制

    PROGPPCNEXUS读写烧录刷写软件 飞思卡尔MPC55xx/56xx/57xx/58xx 没有次数限制 YID:58180666191837044新能源纯电动

  10. 益智小游戏《测试脑力》源码H5+安卓+IOS三端源码

    cocos creator2.4.2 益智小游戏<测试脑力>源码H5+安卓+IOS三端源码,开发脚本为typeScript方便扩展和阅读,支持cocos creator2.X版本,完整的源 ...

最新文章

  1. oracle自动备份
  2. 掘金小册Jenkins大纲准备
  3. 只等你来!OpenAtom XuperChain 开发者夏季论坛来啦
  4. gj10 python socket编程
  5. php旅行社网站源码在线支付,PHP各大支付平台在线支付集成源码
  6. 删除字符串中指定的字符形成字符串
  7. 获取组织分类后群数据
  8. linux内核分析和应用 -- 进程与线程(上)
  9. 电大计算机网考辅导,【电大复习资料小抄】2016年12月份电大统考计算机考前辅导电子表格 电大考试必备小抄.doc...
  10. IE工程师应该如何规划职业发展?-优思学院
  11. 【PS】106个水彩花卉和树叶画笔
  12. cmd打开记事本并写字_Windows中的记事本和写字板之间有什么区别?
  13. java计算机毕业设计企业员工考勤系统的设计与实现源代码+数据库+系统+lw文档
  14. Port-knocking 简单教程
  15. 从k8s集群主节点数量为什么是奇数来聊聊分布式系统
  16. 我的世界mypet插件 v1.7.1
  17. CMake中option和cmake_dependent_option的使用
  18. goto是python的保留字吗_Python中的保留字
  19. Hadoop相关命令
  20. 你什么时候觉得如果自己不努力,背后会是万丈深渊?

热门文章

  1. 程序员要不要懂底层原理
  2. 用HTML搞一个汇率转换器,Currency Converter:实时汇率转换
  3. android+自定义跑马灯,android自定义View实现跑马灯效果
  4. 跑马灯带你深入浅出TextView的源码世界
  5. NOWAIT及SKIP LOCKED的使用
  6. RGB转灰度的几种算法
  7. Oracle迁移到MySQL的各种坑及自救方案
  8. 简述CC2530晶振、振荡器与时钟
  9. cornell movie-dialogs corpus 康奈尔大学电影对话语料介绍及下载 可用于dialog,chatbot
  10. 51单片机学习入门(三):串口