ios 开发资源整合

IOS-加速度传感器(重力感应)-UIAcceleromete

2017-03-07  本文已影响142人  Daimer

加速度传感器,就是俗称的重力感应,其实不仅仅可以检测到对重力的感应,它可以捕捉到三个维度的加速度信息。

把iOS设备正面朝上放到桌面上,加速度传感器的默认原点在手机的物理重心位置,x,y,z轴分别穿过这个原点,x轴向右为正方向,y轴朝手机顶部为正方向,z轴朝上为正方向,可以通过代理方法来获取相应方向的加速度具体数值。

加速度传感器使用步骤如下:

①召唤UIAccelerometer这个单例;

②设置UIAccelerometer的updateInterval属性,就是设置通知间隔;

③向UIAccelerometer的delegate属性中设置负责具体处理的委托类;

④实现委托方法accelerometer:didAccelerate:以接受加速度的通知;

⑤从accelerometer:didAccelerate:方法的第二个参数UIAcceleration实例的相关属性中获取加速度。

accelerometer:didAccelerate:方法的第二个参数UIAcceleration实例中,分别拥有代表x轴、y轴、z轴方向加速度的属性。

程序运行之后,在屏幕中央显示一个绿色小方块,倾斜手机时,方块将向着倾斜的方向运动,碰撞到屏幕顶部后将反弹回来。

//屌丝牌ViewController

@interfaceDSViewController :UIViewController

{

//我们用一个label来表示随加速度方向运动的小方块

UILabel*_label;

//x轴方向的速度

UIAccelerationValue_speedX;

//y轴方向的速度

UIAccelerationValue_speedY;

}

@end

@implementationDSViewController

- (void)viewDidLoad

{

[superviewDidLoad];

self.view.backgroundColor=

[UIColoryellowColor];

CGRectwinRect = [UIScreenmainScreen].applicationFrame;

//实例化 随加速度方向运动的小方块(label)

_label= [[UILabelalloc]initWithFrame:CGRectMake(0,0,80,80)];

_label.center=CGPointMake(winRect.size.width*0.5,

winRect.size.height*0.5);

_label.text=@"Droid";

_label.textAlignment=UITextAlignmentCenter;

_label.backgroundColor=

[UIColorgreenColor];

[self.view addSubview:_label];

[_label release];

}

-(void)viewWillAppear:(BOOL)animated

{

[superviewWillAppear:animated];

//召唤加速度传感器

UIAccelerometer*accelerometer = [UIAccelerometersharedAccelerometer];

//设置加速度传感器的 接收加速度通知的时间间隔

//设置为1.0/60.0表示一秒接收60次,可根据实际需求调整

accelerometer.updateInterval=1.0/60.0;

//下面这个不设置,代理方法就不会调用

accelerometer.delegate=self;

}

-(void)viewWillDisappear:(BOOL)animated

{

[superviewWillDisappear:animated];

//不要忘了停止传感器的工作

//结束加速度传感器的工作

_speedX=_speedY=0;

UIAccelerometer*accelerometer = [UIAccelerometersharedAccelerometer];

accelerometer.delegate=nil;

}

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

{

//获得的加速度要考虑到加速度传感器的原点是物理重心,而不是屏幕右上角

//x轴方向的速度加上x轴方向获得的加速度

_speedX+= acceleration.x;

//y轴方向的速度加上y轴方向获得的加速度

_speedY+= acceleration.y;

//小方块将要移动到的x轴坐标

CGFloatposX =_label.center.x+_speedX;

//小方块将要移动到的y轴坐标

CGFloatposY =_label.center.y-_speedY;

//碰到屏幕边缘反弹

if(posX <0.0) {

posX =0.0;

//碰到屏幕左边以0.4倍的速度反弹

_speedX*= -0.4;

}elseif(posX >self.view.bounds.size.width){

posX =self.view.bounds.size.width;

//碰到屏幕右边以0.4倍的速度反弹

_speedX*= -0.4;

}

if(posY <0.0) {

posY =0.0;

//碰到屏幕上边不反弹

_speedY=0.0;

}elseif(posY >self.view.bounds.size.height){

posY =self.view.bounds.size.height;

//碰到屏幕下边以1.5倍的速度反弹

_speedY*= -1.5;

}

//移动小方块

_label.center=CGPointMake(posX,

posY);

}

@end

上一篇下一篇

猜你喜欢

热点阅读