IOS学习笔记-加速度传感器(重力感应)-UIAccelerometer

 上一篇博文介绍的是摇一摇的检测方法,也提过了可以使用加速度传感器来实现,加速度传感器可以捕捉更加高级的加速度动作。而且使用方法也比较简单,有木有!

      加速度传感器,就是俗称的重力感应,其实不仅仅可以检测到对重力的感应,它可以捕捉到三个维度的加速度信息。
      把iOS设备正面朝上放到桌面上,加速度传感器的默认原点在手机的物理重心位置,x,y,z轴分别穿过这个原点,x轴向右为正方向,y轴朝手机顶部为正方向,z轴朝上为正方向,可以通过代理方法来获取相应方向的加速度具体数值。

 加速度传感器使用步骤如下:
①召唤UIAccelerometer这个单例;
②设置UIAccelerometer的updateInterval属性,就是设置通知间隔;
③向UIAccelerometer的delegate属性中设置负责具体处理的委托类;
④实现委托方法accelerometer:didAccelerate:以接受加速度的通知;
⑤从accelerometer:didAccelerate:方法的第二个参数UIAcceleration实例的相关属性中获取加速度。

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

下面是一个使用加速度传感器demo。



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

//屌丝牌 ViewController
@interface   DSViewController :  UIViewController  <UIAccelerometerDelegate >

{

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

     UILabel  *_label;

     //x轴方向的速度

     UIAccelerationValue  _speedX;

     //y轴方向的速度

     UIAccelerationValue  _speedY;

}

@end

 

@implementation  DSViewController

- ( void )viewDidLoad

{

    [ super  viewDidLoad ];

 

     self . view . backgroundColor  = [ UIColor  yellowColor ];

      CGRect   winRect = [ UIScreen  mainScreen ]. applicationFrame ;

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

     _label  = [[ UILabel  alloc ] 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  = [ UIColor  greenColor ];

    [ self . view addSubview : _label ];

    [ _label release ];

}



-( void )viewWillAppear:( BOOL )animated

{

    [ super   viewWillAppear :animated];

     //召唤加速度传感器

     UIAccelerometer  *accelerometer = [ UIAccelerometer  sharedAccelerometer ];

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

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

    accelerometer. updateInterval  =  1.0 / 60.0 ;

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

    accelerometer. delegate  =  self ;

}



-( void )viewWillDisappear:( BOOL )animated

{

    [ super   viewWillDisappear :animated];

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

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

     _speedX  =  _speedY  =   0 ;

     UIAccelerometer  *accelerometer = [ UIAccelerometer  sharedAccelerometer ];

    accelerometer. delegate  =  nil ;

}



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

{

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

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

     _speedX  += acceleration. x ;

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

     _speedY  += acceleration. y ;

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

      CGFloat   posX =  _label . center . +  _speedX ;

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

      CGFloat   posY =  _label . center . -  _speedY ;

     //碰到屏幕边缘反弹

     if  (posX <  0.0 ) {

        posX =  0.0 ;

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

         _speedX  *= - 0.4 ;

    } else   if (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 ;

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

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

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

         _speedY  *= - 1.5 ;

    }

       //移动小方块

     _label . center  =  CGPointMake (posX, posY);

}

@end




首尾呼应:加速度传感器使用很easy有木有!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值