//  加速计-传统用法

//

//  Created by 严焕培 on 15-05-19.

//  Copyright (c) 2015年 sibu. All rights reserved.

//

#import "MainViewController.h"

#import <QuartzCore/QuartzCore.h>

@interface MainViewController () <UIAccelerometerDelegate>

{

// 小球图像

UIImageView     *_ball;

// 小球速度

CGPoint         _ballVelocity;

// 游戏时钟

CADisplayLink   *_gameTimer;

}

@end

@implementation MainViewController

/*

使用DEPRECATED描述符的方法和对象,是不推荐使用的,同时也是官方停止更新的方法

但是,只要存在,就能使用!

提示:加速剂默认是不工作,因为工作会耗电,当设置了采样频率,加速剂开始工作,同时将采样获得的数据

通过代理方法,发送给调用方

UIAcceleration的说明

* timestamp    数据采样发生的时间

* x            x 方向的加速度

* y            y 方向的加速度

* z            z 方向的加速度

}

*/

- (void)viewDidLoad

{

[super viewDidLoad];

UIImage *image = [UIImage imageNamed:@"black.png"];

_ball = [[UIImageView alloc]initWithImage:image];

[_ball setCenter:self.view.center];

[self.view addSubview:_ball];

// 小球初始静止

_ballVelocity = CGPointZero;

// 加速计

// 1. 实例化加速计,因为在手机上有且仅有一个芯片,因此使用单例来访问加速计

UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];

// 2. 设置更新频率(采样频率)

[accelerometer setUpdateInterval:1 / 30.0];

// 3. 设置代理

[accelerometer setDelegate:self];

// 游戏时钟

// 1. 实例化

_gameTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(step)];

// 2. 主运行循环

[_gameTimer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

}

#pragma mark - 时钟监听方法

- (void)step

{

[self updateBallLocation];

}

#pragma mark - 更新小球位置

- (void)updateBallLocation

{

// 根据小球位置调整中心点位置

CGPoint center = _ball.center;

// 判断小球的位置是否超出边界,如果超出边界,将小球的方向求反

// 1) 水平方向

// 如果小球的最小x值,小于0,表示左边出界

// CGRectGetMinX(_ball.frame) = _ball.frame.origin.y

// 如果小球的最大x值,大于viewW,表示右边边出界

if (CGRectGetMinX(_ball.frame) < 0 || CGRectGetMaxX(_ball.frame) > self.view.bounds.size.width) {

_ballVelocity.x *= -0.8;

// 修复小球位置

if (CGRectGetMinX(_ball.frame) < 0) {

center.x = _ball.bounds.size.width / 2;

} else {

center.x = self.view.bounds.size.width - _ball.bounds.size.width / 2;

}

}

// 2)垂直方向

if (CGRectGetMinY(_ball.frame) < 0 || CGRectGetMaxY(_ball.frame) > self.view.bounds.size.height) {

_ballVelocity.y *= -0.8;

// 修复小球位置

if (CGRectGetMinY(_ball.frame) < 0) {

center.y = _ball.bounds.size.height / 2;

} else {

center.y = self.view.bounds.size.height - _ball.bounds.size.height / 2;

}

}

center.x += _ballVelocity.x;

center.y += _ballVelocity.y;

[_ball setCenter:center];

}

#pragma mark - 加速计代理方法

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration

{

// 使用加速度调整小球速度

_ballVelocity.x += acceleration.x;

_ballVelocity.y -= acceleration.y;

// 让加速剂仅负责采样数据,更新速度

[self updateBallLocation];

}

@end

重力感应 加速计- By严焕培的更多相关文章

  1. xcode 常用插件 加快开发速度 --严焕培

    1.KSImageNamed-Xcode 为项目中使用的UIImage的imageNamed提供文件名自动补全功能.使用[UIImage imageNamed:@"xxx"]时,该 ...

  2. h5手机摇一摇功能实现:基于html5重力感应DeviceMotionEvent事件监听手机摇晃

    DeviceMotionEven是html5提供的一个用来获取设备物理方向及运动的信息(比如陀螺仪.罗盘及加速计)的Dom事件,事件描述如下: deviceorientation:提供设备的物理方向信 ...

  3. cocos2dx 3.x(让精灵随着重力感应的方向移动而移动)

    // // GameScene.hpp // HelloWord // // Created by apple on 2017/1/7. // // #ifndef GameScene_hpp #de ...

  4. H5案例分享:html5重力感应事件

    html5重力感应事件 一.手机重力感应图形分析 1.设备围绕z轴的旋转角度为α,α角度的取值范围在[0,360). 设备在初始位置,与地球(XYZ)和身体(XYZ)某个位置对齐. 设备围绕z轴的旋转 ...

  5. 【Android开发学习笔记】【第九课】重力感应

    概念 使用重力感应技术的Android游戏已经屡见不鲜,不知道自己以后会不会用到,所以先研究了一下. 在网上学习了一下,貌似没有api,所以得自己去分析手机处在怎样状态下.注意: 下面提供的demo程 ...

  6. Cocos2D-X2.2.3学习笔记9(处理重力感应事件,移植到Android加入两次返回退出游戏效果)

    这节我们来学习Cocos2d-x的最后一节.怎样处理重力感应事件.移植到Android后加入再按一次返回键退出游戏等.我这里用的Android.IOS不会也没设备呃 效果图不好弄,由于是要移植到真机上 ...

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

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

  8. 移动终端学习2:触屏原生js事件及重力感应

    如今智能移动设备已经渗透到人们生活的方方面面,用户数量也在不断迅速增长(市场研究机构 eMarketer 在今年初发表的趋势报告中预测,2014年至2018年,中国智能手机用户从总人口的 38.3%增 ...

  9. Android重力感应开发

    http://blog.csdn.net/mad1989/article/details/20848181 一.手机中常用的传感器 在Android2.3 gingerbread系统中,google提 ...

随机推荐

  1. AWS修改RDS时区

    查看 RDS 当前时区 默认情况下,AWS 的 RDS 采用的是 UTC 时间.而我们地区一般位于东八区,因此我们本地的时间是 UTC+8. 连接到 RDS 上,查询当前实例的时区. show var ...

  2. Python_关于python2的encode(编码)和decode(解码)的使用

    在使用Python2时,我们习惯于在文件开头声明编码 # coding: utf-8 不然在文件中出现中文,运行时就会报错 SyntaxError: Non-ASCII character... 之类 ...

  3. 初识python 之 爬虫:爬取某电影网站信息

    注:此代码仅用于个人爱好学习使用,不涉及任何商业行为!  话不多说,直接上代码: 1 #!/user/bin env python 2 # author:Simple-Sir 3 # time:201 ...

  4. C# string.Format 和 String.Format 的区别

    string.Format 和 String.Format  ,不论是用法还是意思,都是一样的 怎么使用? 通过 占位符来替换 ,类似于 Replace 的操作 string s = string.F ...

  5. spring boot 集群 + Nginx --- 心得

    1.前言 已经掌握了spring cloud 得使用 ,但这是在内部网络做业务 ,现在需要 在外部网络 访问内部网络 服务 ,引入了 服务端负载均衡 Nginx , Nginx 根据预定的策略 ,将请 ...

  6. js 关于 data.xuNum = xuNum++; 赋值写法 的探讨

    1 .源码 let xuNum = 0; let data = []; data.xuNum = xuNum++; console.log(data.xuNum) 2.打印结果 //  0 3.原因 ...

  7. AI系统——梯度累积算法

    明天博士论文要答辩了,只有一张12G二手卡,今晚通宵要搞定10个模型实验 挖槽,突然想出一个T9开天霹雳模型,加载不进去我那张12G的二手卡,感觉要错过今年上台Best Paper领奖   上面出现的 ...

  8. 通过js触发launch事件获取页面信息

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6814776265602499080/ 承接上一篇文档<页面Cookie的JS文件编写> 思路 继续之前 ...

  9. PPT制作手机滑动粗糙效果

    原文链接:https://www.toutiao.com/i6495291974680052238/ 选择"插入"选项卡,"插图"功能组."形状&qu ...

  10. HITsz 数据库笔记

    这是 HITsz 数据库笔记,欢迎到我的 GitHub 上查看,有笔记说明和源码,作业和实验报告,希望对你有帮助 博客园显示图片异常 数据库基本概念 数据抽象 通过抽象来对用户屏蔽复杂性,以简化用户与 ...