美文网首页ios 开发资源整合
IOS-加速度传感器(重力感应)-UIAcceleromete

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

作者: Daimer | 来源:发表于2017-03-07 15:11 被阅读142次

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

    把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

    相关文章

      网友评论

        本文标题: IOS-加速度传感器(重力感应)-UIAcceleromete

        本文链接:https://www.haomeiwen.com/subject/xyumgttx.html