加速计(UIAccelerometer),简单的说,就是获取手机的重力感应和位移判断和处理。比如上下晃动手机,就会触发加速计事件。今天我们就来学习下加速计的使用初步。
1.代码。加速计的实现很简单,只要实现代理中得唯一的一个方法即可。
UIAccelerometerDelegate
代理方法是
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration NS_DEPRECATED_IOS(2_0, 5_0)
acceleration 封装了加速计的xyz坐标,我们可以根据xyz的变化对我们的精灵进行操作
1—)method1 最简单的赋值
UIAccelerationValue x,y,z;
x = acceleration.x;
y = acceleration.y;
z = acceleration.z;
我们可以根据得到的xyz值,进行相应的处理。但是这个xyz值包含了重力,我们的加速事件。后面进行解析
2)获得受重力影响的部分。使用低通滤波算法
//#define kAccelerometerFrequency 50.0
//
//#define kFilteringFactor 0.1
//使用低通滤波算法 得到受重力影响的部分
UIAccelerationValue accleX,accleY,accleZ;
accleX = (acceleration.x *kFilteringFactor) + (accleX * (1.0 - kFilteringFactor));
accleY = (acceleration.y *kFilteringFactor) + (accleY * (1.0 - kFilteringFactor));
accleZ = (acceleration.z *kFilteringFactor) + (accleZ * (1.0 - kFilteringFactor));
3)从x中去除掉 受重力影响的部分,获得最终的xyz的加速计的影响量
//将低通数据从当前数值中过滤掉,以获取简化之后的高通数据
UIAccelerationValue haccleX,haccleY,haccleZ;
haccleX = x - accleX;
haccleY = y - accleY;
haccleZ = z - accleZ;
//使用自己的方法来处理数据
self.isTouchEnabled = YES;
一定要注意的是:我们要设置触摸响应。
self.isTouchEnabled = YES;