iOS中的手势操作

目录:六种手势

  1. 轻击手势(TapGestureRecognizer)
  2. 拖动手势(PanGestureRecognizer)
  3. 轻扫手势 (SwipeGestureRecognizer)
  4. 长按手势(LongPressGestureRecognizer)
  5. 捏合手势(PinchGestureRecognizer)
  6. 旋转手势(RotationGestureRecognizer)

一、轻击手势

  1. 使用方式
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
    [self.view addGestureRecognizer:tap];
  1. 注意事项一:
    父UIView,子UIButton:在父UIView上添加轻击手势
    除了点击按钮无法响应此事件之外,点击其它处都可以响应
    如果把UIButton的userInteractionEnable设置NO,则点击按钮也可以响应触摸
    结论:父View的tab和button的click不能同时触发
  2. 注意事项二:
    父UIView,子UIButton:在UIButton上添加轻击手势
    优先响应tap的点击事件,无tap点击事件时才会响应clcik
    设置userInteractionEnabled后,两个事件都不会响应
  3. 注意事项三:
    父UIView,子UIButton:在UIView和UIButton上添加轻击手势
    响应UIView的tap的点击事件
  4. 注意事项四:
    子View是UITableView
    无论是给父View还是给UITableView设置触摸事件,都会造成didSelectRowAtIndexPath无法执行

二、拖动手势

  1. 使用方式
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
    [self.view addGestureRecognizer:tap];
    UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureRecognized:)];
    gesture.delegate = self;
    [self.scrollView addGestureRecognizer:gesture];
//获取偏移量
// 返回的是相对于最原始的手指的偏移量
CGPoint transP = [pan translationInView:self.imageView];

//手势滑动中
if (recognizer.state == UIGestureRecognizerStateBegan) { }
//手势滑动中
if (recognizer.state == UIGestureRecognizerStateChanged) { }
//手势结束
if (recognizer.state == UIGestureRecognizerStateEnded) { }

if ([recognizer velocityInView:self.view].y < 0) {
    NSLog(@"向上");
} else {
    NSLog(@"向下");
}
UIGestureRecognizerStatePossible,   // 识别器还没有识别出它的手势(状态)(Possible),但是可能计算触摸事件。这是默认状态
     
UIGestureRecognizerStateBegan,      // 识别器已经接收识别为此手势(状态)的触摸(Began)。在下一轮run循环中,响应方法将会被调用。
UIGestureRecognizerStateChanged,    // 识别器已经接收到触摸,并且识别为手势改变(Changed)。在下一轮run循环中,响应方法将会被调用。
UIGestureRecognizerStateEnded,      // 识别器已经接收到触摸,并且识别为手势结束(Ended)。在下一轮run循环中,响应方法将会被调用并且识别器将会被重置到UIGestureRecognizerStatePossible状态。
UIGestureRecognizerStateCancelled,  // 识别器已经接收到触摸,这种触摸导致手势取消(Cancelled)。在下一轮run循环中,响应方法将会被调用。识别器将会被重置到UIGestureRecognizerStatePossible状态。
 
UIGestureRecognizerStateFailed,     // 识别器已经接收到一个触摸序列,不能识别为手势(Failed)。响应方法将不会被调用,并且识别器将会重置到UIGestureRecognizerStatePossible。
 
// 离散手势 - 手势识别器识别一个离散事件,但是不会报告改变(例如,一个轻击)不会过度到Began和Changed状态,并且不会失败(fail)或者被取消(cancell)
UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded // 识别器接收触摸,并且识别为此手势。在下一轮run循环中,响应方法将会被调用,并且识别将会重置至UIGestureRecognizerStatePossible。

你可能感兴趣的:(iOS)