UI: UIGestureRecognizer IOS中手势的用法


UIGestureRecognizer 手势识别器,是常用手势的父类

可以手写代码,也可以拖拽应用手势。

1.触摸Touch

四个方法:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    _label1.text = @"触摸开始";
    //1.获得触摸屏幕的手指
    UITouch *touch = [touches anyObject];
    //2.得到当前手指所在的位置的坐标
    _startPoint = [touch locationInView:self.view];
    //3.显示坐标
    _label1.text = [NSString stringWithFormat:@"开始:x=%.1f,y=%.1f",_startPoint.x,_startPoint.y];
    //5.获得触摸屏幕次数
    int tapCount = touch.tapCount;
    //6.获得点击手指数目
    int fingerCount = touches.count;
    _label4.text = [NSString stringWithFormat:@"触摸次数:%i,手指数:%i",tapCount,fingerCount];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    //只要有移动就进入此方法
    _label2.text = @"触摸move";
    //1.获得触摸屏幕的手指
    UITouch *touch = [touches anyObject];
    //2.得到当前手指所在的位置的坐标
    CGPoint point = [touch locationInView:self.view];
    //3.显示坐标
    _label2.text = [NSString stringWithFormat:@"x=%.1f,y=%.1f",point.x,point.y];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    _label3.text = @"触摸end";
    //1.获得触摸屏幕的手指
    UITouch *touch = [touches anyObject];
    //2.得到当前手指所在的位置的坐标
    _endPoint = [touch locationInView:self.view];
    //3.显示坐标
    _label3.text = [NSString stringWithFormat:@"x=%.1f,y=%.1f",_endPoint.x,_endPoint.y];
    //4.计算位移  fabsf()计算绝对值
    float distancesX = fabsf(_endPoint.x - _startPoint.x);
    float distancesY = fabsf(_endPoint.y - _startPoint.y);
    _label4.text = [NSString stringWithFormat:@"结束:x方向位移:%.1f,y方向位移:%.1f",distancesX,distancesY];
    
    
    //7.判断最后的点是否在图片里面
    if (CGRectContainsPoint(_imageView.frame, _endPoint)) {
        _label4.text = @"抬起时在图片里面";
    }else{
        _label4.text = @"抬起时不在图片里面";
    }
    
    //默认接受单点触碰事件,多点触碰需要开启
    self.view.multipleTouchEnabled = YES;
}

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    _label.text = @"触摸cancel";
}


2.清扫

//1.创建轻扫手势对象,为它添加执行手势时候的方法
    UISwipeGestureRecognizer *swipeR = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRightAction:)];
    //2.设定轻扫手势的方向
    /*
     UISwipeGestureRecognizerDirectionRight = 1 << 0,
     UISwipeGestureRecognizerDirectionLeft  = 1 << 1,
     UISwipeGestureRecognizerDirectionUp    = 1 << 2,
     UISwipeGestureRecognizerDirectionDown  = 1 << 3
     */
    swipeR.direction = UISwipeGestureRecognizerDirectionRight;
    
    //3.将手势添加到视图上
    [self.view addGestureRecognizer:swipeR];
    
    //不能为一个手势添加多个轻扫方向!!!
    
    //向左清扫
    UISwipeGestureRecognizer *swipeL = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftAction:)];
    swipeL.direction = UISwipeGestureRecognizerDirectionLeft;
    [self.view addGestureRecognizer:swipeL];
    
    //向上清扫
    UISwipeGestureRecognizer *swipeU = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUpAction:)];
    swipeU.direction = UISwipeGestureRecognizerDirectionUp;
    [self.view addGestureRecognizer:swipeU];
    
    //向下清扫
    UISwipeGestureRecognizer *swipeD = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDownAction:)];
    swipeD.direction = UISwipeGestureRecognizerDirectionDown;
    [self.view addGestureRecognizer:swipeD];


3.点击

//1.创建单击手势
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleAction:)];
    //2.1设置点击的手指数
    [singleTap setNumberOfTouchesRequired:1];
    //2.2设置点击次数
    [singleTap setNumberOfTapsRequired:1];
    //3.手指加到视图上
    [self.view addGestureRecognizer:singleTap];
    
    //一个手指双击
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleAction:)];
    [doubleTap setNumberOfTouchesRequired:1];
    [doubleTap setNumberOfTapsRequired:2];
    [self.view addGestureRecognizer:doubleTap];
    
    //双击的时候可以响应双击时间,但是同时也被看成是两次单击事件,所以需要设定手势的优先级
    [singleTap requireGestureRecognizerToFail:doubleTap];
    //单击优先级低于双击的优先级别
    
    
    //两个手指的双击事件
    UITapGestureRecognizer *doubleTapEve = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapEveAction:)];
    [doubleTapEve setNumberOfTouchesRequired:2];
    [doubleTapEve setNumberOfTapsRequired:2];
    [self.view addGestureRecognizer:doubleTapEve];
    
    //1个手指的三击事件
    UITapGestureRecognizer *tripleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tripleTapAction:)];
    [tripleTap setNumberOfTouchesRequired:1];
    [tripleTap setNumberOfTapsRequired:3];
    [self.view addGestureRecognizer:tripleTap];
    
    [doubleTap requireGestureRecognizerToFail:tripleTap];


4.长按

// 1.创建长按的手势
    UILongPressGestureRecognizer *press = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(pressAction:)];
    //2.1设置长按的时间
    press.minimumPressDuration = 1;
    //2.2设置手指数量
    [press setNumberOfTouchesRequired:1];
    
    //3.把手势加到视图上
    //如果加到UILabel、UIImageView等上面,需要开启用户交互才能使用
    _label.userInteractionEnabled = YES;
    [_label addGestureRecognizer:press];
//    [self.view addGestureRecognizer:press];


5.捏合

- (void)viewDidLoad
{
    [super viewDidLoad];
    //1.创建捏合手势(默认捏合手指数为2)
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchAction:)];
    
    //2.加到视图上
    [_imageView addGestureRecognizer:pinch];
    _imageView.userInteractionEnabled = YES;
}
-(void)pinchAction:(UIPinchGestureRecognizer*)pinch{
    _imageView.transform = CGAffineTransformMakeScale(pinch.scale, pinch.scale);
    if (pinch.scale == UIGestureRecognizerStateEnded) {
        _imageView.transform = CGAffineTransformMakeScale(1, 1);
    }
}


6.旋转

//1.创建旋转手势
    UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)];
    
    //2.添加手势
    _imageView.userInteractionEnabled = YES;
    [_imageView addGestureRecognizer:rotation];
}
-(void)rotationAction:(UIRotationGestureRecognizer*)rotation{
    _imageView.transform = CGAffineTransformMakeRotation(rotation.rotation);
}


7.拖拽

- (void)viewDidLoad
{
    [super viewDidLoad];
    //1.创建拖拽的手势
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
    
    //2.把手势加到视图上
    [_imageView addGestureRecognizer:pan];
    _imageView.userInteractionEnabled = YES;
}
-(void)panAction:(UIPanGestureRecognizer*)pan{
    //1.取到图片中点坐标
    CGPoint centerPoint = _imageView.center;
    //2.获取拖拽手势相对于当前视图的偏移位置
    CGPoint point = [pan translationInView:self.view];
    
    //3.计算图片新的坐标
    _imageView.center = CGPointMake(centerPoint.x+point.x, centerPoint.y+point.y);
    //4.每拖拽一点,就将translation设置为CGPointZero,否则每次拖拽都会在原有基础上累加
    if (pan.state == UIGestureRecognizerStateChanged) {
        [pan setTranslation:CGPointZero inView:self.view];
    }
}


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。