iOS手势识别的简单应用

六种手势

1.手势分类
  • UITapGestureRecognizer(敲击)
  • 设置numberOfTapsRequired点击的次数
  • 结合代理(BOOL) gestureRecognizer能够选定可点击的区域
  • UIPinchGestureRecognizer(捏合,用于缩放)
  • 注意复位问题
  • UIPanGestureRecognizer(拖拽)
  • UISwipeGestureRecognizer(轻扫)
  • UIRotationGestureRecognizer(旋转)
  • UILongPressGestureRecognizer(长按)
    • 长按的两次响应问题的解决
2.对每个手势的注意点及代码实现进行说明
  • UITapGestureRecognizer(敲击)git

    #pragma mark - tap敲击
    /**
     *  1.numberOfTapsRequired设置点击几回响应
     *  2.代理与(BOOL) gestureRecognizer结合,可肯定图片哪一个区域能够点,哪些不能点
     */
    -(void) setTap{
        //建立点按手势
        //initWithTarget:谁监听这个事件呢,通常控制器
        UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)];
        //delegate
        tap.delegate=self;
        //click counts
        tap.numberOfTapsRequired=2;
        //添加手势,用的是多态addGestureRecognizer:(UIGestureRecognizer*)gestureRecognizer(父类)
        [self.imageView addGestureRecognizer:tap];
    }
    
    -(void) tap:(UITapGestureRecognizer *) tap{
        NSLog(@"%s",__func__);
    }
     

#pragma mark - UIGestureRecognizerDelegate //与tap结合 -(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch )touch{ //获取当前触摸点在self.imageView的哪一个位置 CGPoint curP=[touch locationInView:self.imageView]; if (curP.x<self.imageView.bounds.size.width0.5) { return YES; }else{ return NO; } }github

```
  • UIPinchGestureRecognizer(捏合,用于缩放)ui

     

#pragma mark - pinch捏合,用于缩放 -(void) setPinch{ UIPinchGestureRecognizer *pinch=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinch:)]; pinch.delegate=self; [self.imageView addGestureRecognizer:pinch]; } -(void) pinch:(UIPinchGestureRecognizer *) pinch{ NSLog(@"%s",func); self.imageView.transform=CGAffineTransformScale(self.imageView.transform, pinch.scale, pinch.scale); pinch.scale=1; } ```.net

  • UIPanGestureRecognizer(拖拽)代理

    #pragma mark - pan拖拽
    /**
     *  复位是指返回到起始的状态,再能过相对上一个状态tansform来解决一些问题
     */
    -(void) setPan{
        UIPanGestureRecognizer *pan=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(pan:)];
    
        [self.imageView addGestureRecognizer:pan];
    }
    
    -(void) pan:(UIPanGestureRecognizer *) pan{
        NSLog(@"%s",__func__);
    //    CGPoint curP=[pan locationInView:self.imageView];
        //获取图片移动距离
        CGPoint curP=[pan translationInView:self.imageView];
        self.imageView.transform=CGAffineTransformTranslate(self.imageView.transform, curP.x, curP.y);
        //复位
        [pan setTranslation:CGPointZero inView:self.imageView];
    }
  • UISwipeGestureRecognizer(轻扫)code

    #pragma mark - swipe轻扫
    -(void) setSwipe{
        //添加向左滑动
        UISwipeGestureRecognizer *swipe=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipe:)];
        swipe.direction=UISwipeGestureRecognizerDirectionLeft;
        [self.imageView addGestureRecognizer:swipe];
        //添加向右滑动
        UISwipeGestureRecognizer *swipeDown=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipe:)];
        swipeDown.direction=UISwipeGestureRecognizerDirectionRight;
        [self.imageView addGestureRecognizer:swipeDown];
    
    }
    -(void) swipe:(UISwipeGestureRecognizer *)swipe{
        NSLog(@"%s",__func__);
    }
  • UIRotationGestureRecognizer(旋转)orm

    #pragma mark - rotation旋转
    -(void) setRotation{
        UIRotationGestureRecognizer *rotation=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotation:)];
        rotation.delegate=self;
        [self.imageView addGestureRecognizer:rotation];
    }
    -(void) rotation:(UIRotationGestureRecognizer *) rotation{
        NSLog(@"%s",__func__);
        NSLog(@"%f",rotation.rotation);
        self.imageView.transform=CGAffineTransformRotate(self.imageView.transform, rotation.rotation);
        [rotation setRotation:0];
    //    rotation.rotation=0;
    
    }
  • UILongPressGestureRecognizer(长按)事件

    #pragma mark - longPress长按
    -(void) setLongPress{
        UILongPressGestureRecognizer *longPress=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)];
        [self.imageView addGestureRecognizer:longPress];
    }
    /**
     *  长按的一些注意点,那就是长按时触发一次,离开时再触发一次
     *  加个判断,结束与开始选一个触发的时间
     *  @param longPress 传参
     */
    -(void) longPress:(UILongPressGestureRecognizer *) longPress{
        if (longPress.state==UIGestureRecognizerStateBegan) {
            NSLog(@"%s",__func__);
        }
    
    }
  • 当同时多个手势能够处理时(代理)图片

     

/**ip

  • 是否支持多个手势同时处理
  • @param gestureRecognizer 。。
  • @param otherGestureRecognizer 。。
  • @return return value bool */ -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return YES; }
     
3.源代码的地址
相关文章
相关标签/搜索