UIKit中包含了UIGestureRecognizer,协议<UIGestureRecognizerDelegate>,用于检测发生在设备中的手势。UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势: 

    1、拍击UITapGestureRecognizer (任意次数的拍击)  

    2、向里或向外捏UIPinchGestureRecognizer (用于缩放)  

    3、摇动或者拖拽UIPanGestureRecognizer  (移动)

    4、擦碰UISwipeGestureRecognizer (以任意方向)  

    5、旋转UIRotationGestureRecognizer (手指朝相反方向移动)  

    6、长按UILongPressGestureRecognizer (长按)

一个手指,拍击两次手势

 

// 创建一个手势识别器

 

UITapGestureRecognizer *oneFingerTwoTaps =

 

  [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneFingerTwoTaps)] autorelease];

 

  

 

// Set required taps and number of touches

 

[oneFingerTwoTaps setNumberOfTapsRequired:2];

 

[oneFingerTwoTaps setNumberOfTouchesRequired:1];

 

  

 

// Add the gesture to the view

 

[[self view] addGestureRecognizer:oneFingerTwoTaps];

 

 

 

消息方法oneFingerTwoTaps

 

 (void)oneFingerTwoTaps

 

{

 

  NSLog(@"Action: One finger, two taps");

 

}

 

 

// 单击的 Recognizer

    UITapGestureRecognizer* singleRecognizer;

    singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(handleSingleTapFrom)];

    singleTapRecognizer.numberOfTapsRequired = 1; // 单击

    [self.view addGestureRecognizer:singleRecognizer];

    

    // 双击的 Recognizer

    UITapGestureRecognizer* double;

    doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(handleDoubleTapFrom)];

    doubleTapRecognizer.numberOfTapsRequired = 2; // 双击

    [self.view addGestureRecognizer:doubleRecognizer];

    

    // 关键在这一行,如果双击确定偵測失败才會触发单击

    [singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];

    [singleRecognizer release];

    [doubleRecognizer release];

 

两个手指,拍击两次手势

 

UITapGestureRecognizer *twoFingersTwoTaps =

 

  [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingersTwoTaps)] autorelease];

 

[twoFingersTwoTaps setNumberOfTapsRequired:2];

 

[twoFingersTwoTaps setNumberOfTouchesRequired:2];

 

[[self view] addGestureRecognizer:twoFingersTwoTaps];

 

 

 

消息方法twoFingersTwoTaps

 

- (void)twoFingersTwoTaps {

 

  NSLog(@"Action: Two fingers, two taps");

 

}

 

一个手指向上、向下擦碰手势

 

// 向上擦碰

 

UISwipeGestureRecognizer *oneFingerSwipeUp =

 

  [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(oneFingerSwipeUp:)] autorelease];

 

[oneFingerSwipeUp setDirection:UISwipeGestureRecognizerDirectionUp];

 

[[self view] addGestureRecognizer:oneFingerSwipeUp];

 

 

 

- (void)oneFingerSwipeUp:(UISwipeGestureRecognizer *)recognizer

 

{

 

  CGPoint point = [recognizer locationInView:[self view]];

 

  NSLog(@"Swipe up - start location: %f,%f", point.x, point.y);

 

}

 

 

 

// 向下擦碰

 

UISwipeGestureRecognizer *oneFingerSwipeDown =

 

 [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(oneFingerSwipeDown:)] autorelease];

 

[oneFingerSwipeDown setDirection:UISwipeGestureRecognizerDirectionDown];

 

[[self view] addGestureRecognizer:oneFingerSwipeDown];

 

 

 

- (void)oneFingerSwipeDown:(UISwipeGestureRecognizer *)recognizer

 

{

 

 CGPoint point = [recognizer locationInView:[self view]];

 

  NSLog(@"Swipe down - start location: %f,%f", point.x, point.y);

 

}

旋转手势

 

UIRotationGestureRecognizer *twoFingersRotate =

 

  [[[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingersRotate:)] autorelease];

 

[[self view] addGestureRecognizer:twoFingersRotate];

 

 

 

- (void)twoFingersRotate:(UIRotationGestureRecognizer *)recognizer

 

{

 

  // Convert the radian value to show the degree of rotation

 

  NSLog(@"Rotation in degrees since last change: %f", [recognizer rotation] * (180 / M_PI));

 

}

 向里或向外捏的手

 

UIPinchGestureRecognizer *twoFingerPinch =

 

  [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingerPinch:)] autorelease];

 

[[self view] addGestureRecognizer:twoFingerPinch];

 

 

 

- (void)twoFingerPinch:(UIPinchGestureRecognizer *)recognizer

 

{

 

  NSLog(@"Pinch scale: %f", recognizer.scale);

 

}

 

 

 长按的手势

 

UILongPressGestureRecognizer *oneFingerLong =

 

  [[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(oneFingerLong:)] autorelease];

 

[[self view] addGestureRecognizer:oneFingerLong];

 

 

      oneFingerLong.minimumPressDuration=2;

 

- (void)oneFingerLong:(UILongGestureRecognizer *)recognizer

 

{

 

  

 

}

 

/*

 *  gestureRecognizer 实现了委托,从而实现可以同时接受多个手势

 *  @return  YES 则可以接受多个手势,NO 则同时只能接受一个手势

 */

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer {

    return YES;

}