iOS手势UIGestureRecognizer用法总结(摘抄部分)

本文总结了iOS中的UIGestureRecognizer及其6个子类的使用,包括UITapGestureRecognizer(点击)、UIPinchGestureRecognizer(捏合)、UIPanGestureRecognizer(拖拽)、UISwipeGestureRecognizer(滑动)、UIRotationGestureRecognizer(旋转)和UILongPressGestureRecognizer(长按)。详细讲解了各个手势的属性,如点击次数、捏合尺度、滑动方向等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有6个子类处理具体的手势:

1.UITapGestureRecognizer (任意手指任意次数的点击)

// 点击次数

numberOfTapsRequired

// 手指个数

numberOfTouchesRequired 

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] init];  
[tapGestureRecognizer addTarget:self action:@selector(gestureRecognizerHandle:)];  
[tapGestureRecognizer setNumberOfTapsRequired:2];  
[tapGestureRecognizer setNumberOfTouchesRequired:2];  
[self.view addGestureRecognizer:tapGestureRecognizer];  
[tapGestureRecognizer release];

2.UIPinchGestureRecognizer (两个手指捏合动作)

// 手指捏合,大于1表示两个手指之间的距离变大,小于1表示两个手指之间的距离变小

scale

// 手指捏合动作时的速率(加速度)

velocity

UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] init];  
[pinchGestureRecognizer addTarget:self action:@selector(gestureRecognizerHandle:)];  
[self.view addGestureRecognizer:pinchGestureRecognizer];  
[pinchGestureRecognizer release]; 

3.UIPanGestureRecognizer (摇动或者拖拽)

// 最少手指个数

minimumNumberOfTouches

// 最多手指个数

maximumNumberOfTouches

UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] init];  
[panGestureRecognizer addTarget:self action:@selector(gestureRecognizerHandle:)];  
[panGestureRecognizer setMinimumNumberOfTouches:1];  
[panGestureRecognizer setMaximumNumberOfTouches:5];  
[self.view addGestureRecognizer:panGestureRecognizer];  
[panGestureRecognizer release]; 

4.UISwipeGestureRecognizer (手指在屏幕上滑动操作手势)

// 滑动手指的个数

numberOfTouchesRequired

// 手指滑动的方向 (Up,Down,Left,Right)

direction

UISwipeGestureRecognizer *swipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] init];  
[swipeGestureRecognizer addTarget:self action:@selector(gestureRecognizerHandle:)];  
[swipeGestureRecognizer setNumberOfTouchesRequired:2];  
[swipeGestureRecognizer setDirection:UISwipeGestureRecognizerDirectionRight];  
[self.view addGestureRecognizer:swipeGestureRecognizer];  
[swipeGestureRecognizer release];  

5.UIRotationGestureRecognizer (手指在屏幕上旋转操作)

// 旋转方向,小于0为逆时针旋转手势,大于0为顺时针手势

rotation

// 旋转速率

velocity

UIRotationGestureRecognizer *rotationGestureRecognizer = [[UIRotationGestureRecognizer alloc] init];  
[rotationGestureRecognizer addTarget:self action:@selector(gestureRecognizerHandle:)];  
[self.view addGestureRecognizer:rotationGestureRecognizer];  
[rotationGestureRecognizer release];

6.UILongPressGestureRecognizer (长按手势)

// Default is 0. The number of full taps required before the press for gesture to be recognized

numberOfTapsRequired

// 需要长按的手指的个数

numberOfTouchesRequired

// 需要长按的时间,最小为0.5s

minimumPressDuration

// 手指按住允许移动的距离

allowableMovement

UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] init];  
[longPressGestureRecognizer addTarget:self action:@selector(gestureRecognizerHandle:)];  
[longPressGestureRecognizer setMinimumPressDuration:1.0f];  
[longPressGestureRecognizer setAllowableMovement:50.0];  
[self.view addGestureRecognizer:longPressGestureRecognizer];  
[longPressGestureRecognizer release];  


------------------------------------------------------------
二,手势的响应:

1.UITapGestureRecognizer:(略)

2.UIPinchGestureRecognizer (两个手指捏合动作)

- (void) gestureRecognizerHandle: (UIPinchGestureRecognizer*)recognizer
{
if([recognizer state] == UIGestureRecognizerStateBegan) {
      _lastScale = 1.0;
    }

    CGFloat scale = 1.0 - (_lastScale - [recognizer scale]);
    CGAffineTransform currentTransform = photoImage.transform;
    CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
    [photoImage setTransform:newTransform];
    _lastScale = [recognizer scale];

    [self showOverlayWithFrame:photoImage.frame];
}


3.UIPanGestureRecognizer (摇动或者拖拽)

- (void)gestureRecognizerHandle:(UIPanGestureRecognizer *)recognizer
{
    CGPoint translatedPoint = [recognizer translationInView:canvas];
    
    if([recognizer state]==UIGestureRecognizerStateBegan)
    {
        _firstX = [photoImage center].x;
        _firstY = [photoImage center].y;
    }
   translatedPoint = CGPointMake(_firstX+translatedPoint.x, _firstY+translatedPoint.y);
    [photoImage setCenter:translatedPoint];
    [self showOverlayWithFrame:photoImage.frame];
}

4.UISwipeGestureRecognizer (手指在屏幕上滑动操作手势)

- (void)gestureRecognizerHandle:(UISwipeGestureRecognizer *)recognizer
{
    CGPoint point = [recognizer locationInView:[self view]];
    NSLog(@"Swipe down - start location: %f,%f", point.x, point.y);
}


5.UIRotationGestureRecognizer (手指在屏幕上旋转操作)

- (void)gestureRecognizerHandle:(UIRotationGestureRecognizer *)recognizer
{
    if([recognizer state]==UIGestureRecognizerStateEnded)
    {
        _lastRotation = 0.0;
        return;
    }
    CGFloat rotation = 0.0 - (_lastRotation - [recognizer rotation]);
    CGAffineTransform currentTransform = photoImage.transform;
    CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform,rotation);
    [photoImage setTransform:newTransform];
    _lastRotation = [(UIRotationGestureRecognizer*)sender rotation];
    [self showOverlayWithFrame:photoImage.frame];

}
附:当单击和双击相矛盾时,解决方案是:
// 关键在这一行,如果双击确定偵測失败才會触发单击
[singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];



// 刪除手势的方法
[self.view removeGestureRecognizer:recognizer];

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值