日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS开发之手势—UIGestureRecognizer 共存

發(fā)布時間:2025/3/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS开发之手势—UIGestureRecognizer 共存 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在 iPhone 或 iPad 的開發(fā)中,除了用?touchesBegan / touchesMoved / touchesEnded?這組方法來控制使用者的手指觸控外,也可以用?UIGestureRecognizer?的衍生類別來進行判斷。用?UIGestureRecognizer?的好處在于有現(xiàn)成的手勢,開發(fā)者不用自己計算手指移動軌跡。UIGestureRecognizer的衍生類別有以下幾種:

  • UITapGestureRecognizer
  • UIPinchGestureRecognizer
  • UIRotationGestureRecognizer
  • UISwipeGestureRecognizer
  • UIPanGestureRecognizer
  • UILongPressGestureRecognizer

從命名上不難了解這些類別所對應(yīng)代表的手勢,分別是 Tap(點一下)、Pinch(二指往內(nèi)或往外撥動)、Rotation(旋轉(zhuǎn))、Swipe(滑動,快速移動)、Pan (拖移,慢速移動)以及 LongPress(長按)。這些手勢別在使用上也很簡單,只要在使用前定義并添加到對應(yīng)的視圖上即可。

// 定義一個 recognizer, 并加到需要偵測該手勢的 UIView 元件上
- (void)viewDidLoad {
UISwipeGestureRecognizer* recognizer;
// handleSwipeFrom 是偵測到手勢,所要呼叫的方法
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:selfaction:@selector(handleSwipeFrom)];
// 不同的 Recognizer 有不同的實體變數(shù)
// 例如 SwipeGesture 可以指定方向
// 而 TapGesture 則可以指定次數(shù)
recognizer.direction = UISwipeGestureRecognizerDirectionUp
[self.view addGestureRecognizer:recognizer];
[recognizer release];
}

- (void)handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer {
// 觸發(fā)手勢事件后,在這里作些事情

// 底下是刪除手勢的方法
[self.view removeGestureRecognizer:recognizer];
} 問題來了。有些手勢其實是互相關(guān)聯(lián)的,例如 Tap 與 LongPress、Swipe與 Pan,或是 Tap 一次與Tap 兩次。當一個 UIView 同時添加兩個相關(guān)聯(lián)的手勢時,到底我這一下手指頭按的要算是 Tap 還是 LongPress?如果照預(yù)設(shè)作法來看,只要「先滿足條件」的就會跳出并呼叫對應(yīng)方法,舉例來說,如果同時注冊了 Pan 和 Swipe,只要手指頭一移動就會觸發(fā) Pan 然后跳出,因而永遠都不會發(fā)生 Swipe;單點與雙點的情形也是一樣,永遠都只會觸發(fā)單點,不會有雙點。

那么這個問題有解嗎?答案是肯定的,UIGestureRecognizer?有個方法叫做requireGestureRecognizerToFail,他可以指定某一個 recognizer,即便自己已經(jīng)滿足條件了,也不會立刻觸發(fā),會等到該指定的 recognizer 確定失敗之后才觸發(fā)。以同時支持單點與雙點的手勢為例,代碼如下:

- (void)viewDidLoad {
// 單擊的 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];

// 關(guān)鍵在這一行,如果雙擊確定偵測失敗才會觸發(fā)單擊
[singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];
[singleRecognizer release];
[doubleRecognizer release];
}

?

轉(zhuǎn)載于:https://www.cnblogs.com/daguo/archive/2012/08/06/2624844.html

總結(jié)

以上是生活随笔為你收集整理的IOS开发之手势—UIGestureRecognizer 共存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。