美文网首页iOS Developer
iOS开发中六种手势识别

iOS开发中六种手势识别

作者: NexTOne | 来源:发表于2016-07-08 23:16 被阅读754次
    • 轻击手势(TapGestureRecognizer)
    • 轻扫手势 (SwipeGestureRecognizer)
    • 长按手势(LongPressGestureRecognizer)
    • 拖动手势(PanGestureRecognizer)
    • 捏合手势(PinchGestureRecognizer)
    • 旋转手势(RotationGestureRecognizer)
    @interface ViewController () <UIGestureRecognizerDelegate>
    
    
    @property (weak, nonatomic) IBOutlet UIImageView *imageView;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        
        // 1.添加点击手势
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
        // tap.numberOfTapsRequired = 2; // 要求双击才触发事件
        // tap.numberOfTouchesRequired = 2; // 要求两个手指同时触摸才触发事件
        
        tap.delegate = self;
        // 将点击手势添加到imageView上
        [_imageView addGestureRecognizer:tap];
        
        // 2.添加移动手势
        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
        [_imageView addGestureRecognizer:pan];
        pan.delegate = self;
        
        // 3.添加缩放手势
        UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];
        [_imageView addGestureRecognizer:pinch];
        pinch.delegate = self;
        
        // 4.旋转手势
        UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];
        [_imageView addGestureRecognizer:rotation];
        rotation.delegate = self;
        
        // 5.轻扫手势
        UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipe:)];
        // 设置轻扫的方向
        swipe.direction = UISwipeGestureRecognizerDirectionLeft;
        [_imageView addGestureRecognizer:swipe];
        swipe.delegate = self;
        
        // 添加长按手势
        UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
        //设置长按时间
        longPress.minimumPressDuration = 0.5;
        [_imageView addGestureRecognizer:longPress];
        longPress.delegate = self;
        
    }
    
    - (void)tap:(UITapGestureRecognizer *)tap {
        NSLog(@"tap---");
    }
    
    - (void)pan:(UIPanGestureRecognizer *)pan {
        // 获得移动手势在self.view上面的偏移量(x, y)
        CGPoint point = [pan translationInView:self.view];
        // 让图片视图随着手指移动
        pan.view.center = CGPointMake(pan.view.center.x + point.x, pan.view.center.y + point.y);
        // 重置手势获取的偏移量
        [pan setTranslation:CGPointZero inView:self.view];
    }
    
    - (void)pinch:(UIPinchGestureRecognizer *)pinch {
        // 参数一:原来的transform
        // 参数二:水平方向缩放的倍数
        // 参数三:垂直方向缩放的倍数
        pinch.view.transform = CGAffineTransformScale(pinch.view.transform, pinch.scale, pinch.scale);
        // 重置缩放倍数
        pinch.scale = 1.0;
    }
    
    - (void)rotation:(UIRotationGestureRecognizer *)rotation {
        rotation.view.transform = CGAffineTransformRotate(rotation.view.transform, rotation.rotation);
        // 重置角度
        rotation.rotation = 0;
    }
    
    - (void)swipe:(UISwipeGestureRecognizer *)swipe {
        NSLog(@"swipe");
    }
    
    - (void)longPress:(UILongPressGestureRecognizer *)longPress {
        /*
         说明:长按手势的常用状态如下
         开始:UIGestureRecognizerStateBegan
         改变:UIGestureRecognizerStateChanged
         结束:UIGestureRecognizerStateEnded
         取消:UIGestureRecognizerStateCancelled
         失败:UIGestureRecognizerStateFailed
         */
        if (longPress.state == UIGestureRecognizerStateBegan) {
            NSLog(@"longPress");
        }
    }
    
    
    // 设置同时可以有两个手势同时识别
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
        return YES;
    }
    

    相关文章

      网友评论

        本文标题:iOS开发中六种手势识别

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