分享

IOS学习笔记

 kaosaudi 2015-10-10

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

(2012-11-30 15:17:04)
转载请注明出处:http://blog.sina.com.cn/UIKit  By: Droid

      上一篇博文介绍的是摇一摇的检测方法,也提过了可以使用加速度传感器来实现,加速度传感器可以捕捉更加高级的加速度动作。而且使用方法也比较简单,有木有!
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轴方向加速度的属性。
IOS学习笔记-加速度传感器(重力感应)-UIAccelerometer

下面是一个使用加速度传感器demo。
IOS学习笔记-加速度传感器(重力感应)-UIAccelerometer

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

//屌丝牌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.x + _speedX;

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

    CGFloat posY = _label.center.y - _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有木有!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多