添加手势和通过加速计判断手机倾斜方向

老大这两天新出一个需求,不要以前的按钮控制硬件设备,说是太老土了。。。。要求通过手势和传感器来控制设备的移动方向,于是我就了解了下,代码很简单,贴下代码。

#import <CoreMotion/CoreMotion.h>

static double MIN_LIMIT = 0.3;
static double MAX_LIMIT = 1.0;
@interface ViewController ()

@property (nonatomic, strong) CMMotionManager *motionManager;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 添加上下左右四个方向的轻扫手势
    {
        UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
        recognizer.direction = UISwipeGestureRecognizerDirectionRight;
        [self.view addGestureRecognizer:recognizer];
    }
    
    {
        UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
        recognizer.direction = UISwipeGestureRecognizerDirectionLeft;
        [self.view addGestureRecognizer:recognizer];
    }
   
    {
        UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
        recognizer.direction = UISwipeGestureRecognizerDirectionUp;
        [self.view addGestureRecognizer:recognizer];
    }
    
    {
        UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
        recognizer.direction = UISwipeGestureRecognizerDirectionDown;
        [self.view addGestureRecognizer:recognizer];
    }
    
    // 开始加速器
    [self accelerometerPush];
    // 结束加速器
//    [self stopAccelerometer];
}


- (void)handleSwipe:(UISwipeGestureRecognizer *)recognizer {
    
    // Swipe手势的State只有一种End状态,没有开始状态
    switch (recognizer.direction) {
        case UISwipeGestureRecognizerDirectionRight: {
            NSLog(@"向右轻扫");
            break;
        }
        case UISwipeGestureRecognizerDirectionLeft: {
            NSLog(@"向左轻扫");
            break;
        }
        case UISwipeGestureRecognizerDirectionUp: {
             NSLog(@"向上轻扫");
            break;
        }
        case UISwipeGestureRecognizerDirectionDown: {
             NSLog(@"向下轻扫");
            break;
        }
    }
    
}


- (void)accelerometerPush {
    self.motionManager = [[CMMotionManager alloc] init];
    if (![self.motionManager isAccelerometerAvailable]) {
        NSLog(@"加速计不可用");
        return;
    }
    // 更新频率
    self.motionManager.accelerometerUpdateInterval = 0.1;
    [self.motionManager startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc]init] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
        NSLog(@"%f \\\\\\\\\\\\ %f \\\\\\\\\\\\ %f",accelerometerData.acceleration.x,accelerometerData.acceleration.y,accelerometerData.acceleration.z);
        // 保留两位小数,舍弃后面所有位数
        double x = floor(accelerometerData.acceleration.x * 100) / 100;
        double y = floor(accelerometerData.acceleration.y * 100) / 100;
        double z = floor(accelerometerData.acceleration.z * 100) / 100;
        
    /**
     前后方向对应是y轴,向后y为负,向前y为正
     左右方向对应是x轴,向左x为负,向右x为正
     上下方向对应是z轴,向上z为负,向下z为正
     */
        if (y <= -MIN_LIMIT && y >= -MAX_LIMIT &&
            z <= -MIN_LIMIT && z >= -MAX_LIMIT) {
            NSLog(@"向后倾斜");
        }else if (y >= MIN_LIMIT && y <= MAX_LIMIT &&
                  z <= -MIN_LIMIT && z >= -MAX_LIMIT) {
            NSLog(@"向前倾斜");
        }else if (x <= -MIN_LIMIT && x >= -MAX_LIMIT &&
                  z <= -MIN_LIMIT && z >= -MAX_LIMIT) {
            NSLog(@"向左倾斜");
        }else if (x >= MIN_LIMIT && x <= MAX_LIMIT &&
                  z <= -MIN_LIMIT && z >= -MAX_LIMIT) {
            NSLog(@"向右倾斜");
        }else {
            NSLog(@"结束倾斜");
        }
    }];
    

}

- (void)stopAccelerometer {
    [self.motionManager stopAccelerometerUpdates];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值