ios之手势识别

在ios开发过程中手势识别是很重要的一个key

手势识别有六种:

UITapGestureRecognizer(点按)
UIPinchGestureRecognizer (捏合)
UIPanGestureRecognizer(拖动)
UISwipeGestureRecognizer (轻扫)
UIRotationGestureRecogni zer(旋转)
UILongPressGestureRecogn izer(长按)
手势识别的状态(7个)
    1.   //没有触摸事件发生,所有手势识别的默认状态
    UIGestureRecognizerState Possible,
    // 一个手势已经开始但尚未改变或者完成时
    UIGestureRecognizerState Began,
    // 手势状态改变
    UIGestureRecognizerState Changed,
    // 手势完成
    UIGestureRecognizerState Ended,
    // 手势取消,恢复至Possible状态
    UIGestureRecognizerState Cancelled, 
    // 手势失败,恢复至Possible状态
    UIGestureRecognizerState Failed,
    // 识别到手势识别
    UIGestureRecognizerState Recognized=UIGestureRecognizerState Ended 
  2.手势识别的属性
state——手势状态
view——手势发生视图
常用方法
locationInView 获得手势发生对应视图所在位置



//点击的手势:
       // 我们需要定义一个方法,当手势识别检测到的时候,运行
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
        // setNumberOfTapsRequired 点按次数
        [tap setNumberOfTapsRequired:1];
        // setNumberOfTouchesRequired 点按的手指数量
        [tap setNumberOfTouchesRequired:1];
        // 把手势识别增加到视图上
        [_demoView addGestureRecognizer:tap];
        
        //捏合的手势
        UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchAction:)];
        [_demoView addGestureRecognizer:pinch];
        //旋转的手势
        UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationAction:)];
        [_demoView addGestureRecognizer:rotation];
        //拖动 的手势
        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
        [_demoView addGestureRecognizer:pan];
        
        //长按得手势
        UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressAction:)];
        [_demoView addGestureRecognizer:longPress];
        //轻扫的手势
        UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction:)];
        [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
        [_demoView addGestureRecognizer:swipeLeft];

#pragma mark - 轻扫手势
- (void)swipeAction:(UISwipeGestureRecognizer *)sender
{
    NSLog(@"%d", sender.direction);
    switch (sender.direction) {
        case UISwipeGestureRecognizerDirectionLeft:
            NSLog(@"向左扫");
            break;
        case UISwipeGestureRecognizerDirectionRight:
            NSLog(@"向右扫");
            break;
        case UISwipeGestureRecognizerDirectionUp:
            NSLog(@"向上扫");
            break;
        case UISwipeGestureRecognizerDirectionDown:
            NSLog(@"向下扫");
            break;
        default:
            break;
    }
}
#pragma mark - 长按手势
- (void)longPressAction:(UILongPressGestureRecognizer *)sender
{
    // 我们可以利用demoView的Tag属性,默认时tag=0
    // 如果tag=0,我们放大一倍,否则,我们缩小一半
    CGFloat scale;
    if (_demoView.tag == 0) {
        scale = 2.0;
        _demoView.tag = 1;
    } else {
        scale = 0.5;
        _demoView.tag = 0;
    }
    sender.view.transform = CGAffineTransformScale(sender.view.transform, scale, scale);
}

#pragma mark - 拖放手势
- (void)panAction:(UIPanGestureRecognizer *)sender
{
    // 在拖放手势中是需要考虑手指的状态的UIGestureRecognizerState
    // 在拖放手势中使用的状态是UIGestureRecognizerStateChanged
    // 通常在使用拖放手势的时候,当手指离开的时候,应该做一个很小的动作,提醒用户拖放完成
    if (sender.state == UIGestureRecognizerStateChanged) {
        // locationInView
        [_demoView setCenter:[sender locationInView:self.view]];
    } else if (sender.state == UIGestureRecognizerStateEnded) {
        [_demoView setBackgroundColor:[UIColor yellowColor]];
    }
}
#pragma mark - 旋转手势
- (void)rotationAction:(UIRotationGestureRecognizer *)sender
{
    sender.view.transform = CGAffineTransformRotate(sender.view.transform, sender.rotation);
    
    // 和捏合操作类似,旋转角度同样需要方福伟
    sender.rotation = 0.0f;
}
#pragma mark - 捏合手势
- (void)pinchAction:(UIPinchGestureRecognizer *)sender
{
    // 有关转换的内容,我们在后续动画部分再继续
    sender.view.transform = CGAffineTransformScale(sender.view.transform, sender.scale, sender.scale);
    
    // 缩放功能很简单,但是不要忘记将比例复位
    sender.scale = 1.0f;
    NSLog(@"捏我了");
}

#pragma mark - 点按手势
- (void)tapAction:(UITapGestureRecognizer *)sender
{
    
    NSLog(@"点我了 %@", sender);
}


简单操作先介绍到这里 :其中有可能手势识别的时候有时候回和你在添加在同一个俯视图中的子视图重合  这个时候 一定要做好判断:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值