先上效果图


小球根据重力感应 然后降落 并且有弹起效果

一、原理
重力感应的三维空间 xyz的坐标系如图 (注意:和frame的坐标的y不同)

  • x
    向左: 负数 向右:正数
  • y
    向上: 正数 向下:负数
  • z
    屏幕朝上:负数 屏幕朝下:正数

二、代码
注:以下代码只适用于iOS4.0之后
移动的方法都封装在了CoreMotion.framework 这个库中
在工程里加入库 并且在所需控制器中添加头文件CoreMotion/CoreMotion.h

1.引用库
CoreMotion/CoreMotion.h
2.创建运动管理者
@property (nonatomic,strong) CMMotionManager * mgr;
self.mgr = [[CMMotionManager alloc]init];
3.判断加速计是否可以用
if (!self.mgr.isAccelerometerAvailable) {
//表示不可以使用
NSLog(@”加速计不可用”);
return;
}
4.设置采样间隔 (push采样需要 pull采样不需要)
self.mgr.accelerometerUpdateInterval = 1.0/30.0; //一秒钟采样30次
注:push方式是系统主动推过来的 所以需要设置采样时间间隔,对于数据要求较高的app试用,此处的重力感应需要
pull方式是在有需要的时候,自己主动去拿数据,所以不需要设置时间间隔

5.开始采样
push方式
[self.mgr startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
}];
pull方式
[self.mgr startAccelerometerUpdates];

最后提上全部代码

//
//  ViewController.m
//  160412重力加速
//
//  Created by Momo on 16/4/12.
//  Copyright © 2016年 Momo. All rights reserved.
//#import "ViewController.h"
#import <CoreMotion/CoreMotion.h>
@interface ViewController ()<UIAccelerometerDelegate>/** 小球*/
@property (weak, nonatomic) IBOutlet UIImageView *ball;/** 运动管理者*/
@property (nonatomic,strong) CMMotionManager * mgr;/** 小球运动速度*/
@property (nonatomic,assign) CGPoint velocity;
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 1.创建运动管理对象self.mgr = [[CMMotionManager alloc]init];// 2.判断加速器是否可以使用(最好判断一下)if (!self.mgr.isAccelerometerAvailable) {//表示不可以使用NSLog(@"加速计不可用");return;}//push方式[self push];//pull方式//[self pull];}-(void)push{// 3.设置采样间隔 (push采样需要 pull采样不需要)self.mgr.accelerometerUpdateInterval = 1.0/30.0; //一秒钟采样30次// 4.1 开始采样 (push 时时采样)[self.mgr startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {if (error) {return ;}// 5.获取加速计信息CMAcceleration acceleration = accelerometerData.acceleration;NSLog(@"x:%f y:%f z:%f",acceleration.x,acceleration.y,acceleration.z);// 处理小球// v = a * t = a1 + a2 + a3 + ... + at// 1.累加加速度 = 速度_velocity.x += acceleration.x;_velocity.y -= acceleration.y; //y的加速度是相反的 所以就是减// 2.累加速度 = 位移// s = v * t = v1 + v2 + v3 + ... + vtCGRect rect = self.ball.frame;rect.origin.x += _velocity.x;rect.origin.y += _velocity.y;self.ball.frame = rect;// 3.边界处理if (self.ball.frame.origin.x <= 0) {// x超出左边界rect.origin.x = 0;self.ball.frame = rect;//速度取反 削弱速度_velocity.x *= -0.5;}if (CGRectGetMaxX(self.ball.frame) >= self.view.frame.size.width) {// x超出右边界rect.origin.x = self.view.frame.size.width - self.ball.frame.size.width;self.ball.frame = rect;//速度取反 削弱速度_velocity.x *= -0.5;}if (self.ball.frame.origin.y <= 0) {// y超出上边界rect.origin.y = 0;self.ball.frame = rect;//速度取反 削弱速度_velocity.y *= -0.5;}if (CGRectGetMaxY(self.ball.frame) >= self.view.frame.size.height) {// y超出下边界rect.origin.y = self.view.frame.size.height - self.ball.frame.size.height;self.ball.frame = rect;//速度取反 削弱速度_velocity.y *= -0.5;}}];}-(void)pull{// 4.2 开始采样 (pull 有需要时采样)[self.mgr startAccelerometerUpdates];}// 4.2 开始采样 (pull 有需要时采样)//在需要时获取数据 此处为点击屏幕时需要采样
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{//获取加速计信息CMAcceleration acc = self.mgr.accelerometerData.acceleration;NSLog(@"%f,%f, %f", acc.x,acc.y,acc.z);
}@end

iOS - 加速计(重力感应)相关推荐

  1. iOS设备使用重力感应

    首先在你需要检测重力感应的UIView或者UIViewController添加委托<UIAccelerometerDelegate> 然后自己定义一个 UIAccelerometer *a ...

  2. Windows Phone 7(accelerometer)重力感应编程

    使用重力感应器accelerometer,需要引用类库Microsoft.Devices.Sensors ,所以需要在WMAppManifest.xml 加上  <Capability Name ...

  3. iOS 6.1锁屏音乐控制界面升级 玩转重力感应

    苹果iOS升级中最有乐趣的部分之一就是发现设计者做出的微妙的小变动.在昨天刚刚升级的iOS 6.1里,有一个变化初看上去仅仅是表面上的美化,但是经过一段时间之后,你会不禁感叹为什么它没有早些推出.我们 ...

  4. iOS 重力感应 学习1 陀螺仪 水平仪 指南针

    小球可以随着重力感应 四处乱撞. 放大了坐标位移 就可以看见小球动了. 然后规定小球的路径 当滑到中间时候 弹出一张图片 作为提示. 我做了一个小demo 效果不错哦 CMMotionManager ...

  5. ios加速计(可以用来检测摇动,自定义反应灵敏度)

    ios加速计 标签: ios 编程 xcode开发 加速计 杂谈   分类: ios开发 内置加速计是iPhone和iPod Touch中最酷的特性之一,iPhone可以通过这个小设备知道用户握持手机 ...

  6. Unity3D 游戏引擎之平面小球重力感应详解【转】

    http://blog.csdn.net/xys289187120/article/details/6969333       手机重力感应应该对大多数开发者并不陌生,在新一代智能手机Android  ...

  7. 重力感应游戏可行性办法研究_完结

    重力感应游戏可行性办法研究 一.手机中的重力感应组件 很多人都知道手机有重力感应这个功能,但是重力感应具体是什么,却并不是很了解.重力感应组件不是摄像头,人们知道有多少万像素,不是触摸屏,人们了解是电 ...

  8. html5 360全景 陀螺仪,HTML网页设置(开启重力感应/陀螺仪)

    相比较"HTML网页设置",显然"开启重力感应"更有吸引力和侧重点. 这部分在基础的学习中没什么好说的,只有一个开启重力感应可以说. 窗口大小,是针对于输出Fl ...

  9. mui教程2——窗口管理、调用相册、调用摄像头、调用重力感应、微信朋友圈界面(仿制)分析

    一.窗口管理 1,页面初始化 在app开发中,若要使用HTML5+扩展api,必须等plusready事件发生后才能正常使用,mui将该事件封装成了mui.plusReady()方法,涉及到HTML5 ...

最新文章

  1. pandas读取csv文件,变换文件格式,并转换成numpy数组,取出数据
  2. Java Review - 并发编程_DelayQueue原理源码剖析
  3. python后端开发工程师面试题
  4. druid.io mysql 配置_druid.io 使用mysql存储metadata overlord启动出错
  5. CodeForces - 432D Prefixes and Suffixes(KMP的next数组性质)
  6. 403禁止访问:访问被拒绝如何解决_死链接对网站有哪些危害?如何处理死链接?...
  7. Free tour II SPOJ - FTOUR2 点分治 + 树状数组
  8. C#中的复制在unity中使用
  9. Beta冲刺 第一天
  10. WCF服务编程 学习笔记(1)
  11. Java线程池—ThreadPoolExecutor
  12. uni-app项目的启动
  13. 计算机浏览记录删除,如何完全删除本地计算机上的浏览历史记录?如何从计算机中完全删除Internet访问...
  14. oracle回收DBA权限以及授权表空间
  15. 5年内在豫投资超30亿元 重点助力河南智慧城市运营
  16. 无限战争选择服务器,无限战争新手攻略 新手入门必看技巧
  17. Android内存管理(9)*MAT:Heap Dump,Shallow Heap,Retained Heap,Dominating Tree,GC Roots等的含义...
  18. 织梦免费网站模板手机端无法更新的原因及解决
  19. 电解电容和钽电容的区别是什么
  20. 面向对象三大特性(继承)

热门文章

  1. 机器学习之机器如何学习
  2. PHP+Mysql—仓储管理系统网站(前端+后端、整套源码)
  3. STM32单片机不同型号之间程序适配
  4. win32画正弦曲线
  5. 工作中遇到的问题(DS)
  6. 印度为何“盛产”CEO?
  7. Vue-cli 使用 vue-axios Element 完成数据列表分页 以及增删操作
  8. 搭建虚拟服务器会被封吗,梦幻用云服务器虚拟主机玩会封吗
  9. Math_Calculus_07_向量代数与空间解析几何
  10. 为什么实体店纷纷倒闭?是被马云打败的?还是被租金压垮的?