iOS使用UIGestureRecognizer識別手勢

jopen 9年前發布 | 939 次閱讀 C/C++ IOS

UIKit中包含了UIGestureRecognizer類,用于檢測發生在設備中的手勢。UIGestureRecognizer是一個抽象類,定義了所有手勢的 基本行為,它有下面一些子類用于處理具體的手勢:
1、拍擊UITapGestureRecognizer (任意次數的拍擊)
2、向里或向外捏UIPinchGestureRecognizer (用于縮放)
3、搖動或者拖拽UIPanGestureRecognizer
4、擦碰UISwipeGestureRecognizer (以任意方向)
5、旋轉UIRotationGestureRecognizer (手指朝相反方向移動)
6、長按UILongPressGestureRecognizer對于不同類型的手勢識別器,具有不同的配置屬性。比如UITapGest ureRecognizer,可以配置拍擊次數。界面接收到手勢之后,可以發送一個消息,用于處理響應手勢動作后的任務。當然,不同的手勢識別器,發送的消息方法也會 有所不同。

一個手指,拍擊兩次手勢

// 創建一個手勢識別器
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"); }</pre>

    兩個手指,拍擊兩次手勢

    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"); } </pre>

    一個手指向上、向下擦碰手勢

    // 向上擦碰
    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); }</pre>

    旋轉手勢

    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)); }</pre>

    向里或向外捏的手勢

    UIPinchGestureRecognizer *twoFingerPinch =
    [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingerPinch:)] autorelease];
    [[self view] addGestureRecognizer:twoFingerPinch];

  • (void)twoFingerPinch:(UIPinchGestureRecognizer *)recognizer { NSLog(@"Pinch scale: %f", recognizer.scale); }</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!