在 iPhone 或 iPad 的開發中,除了用 touchesBegan / touchesMoved / touchesEnded 這組方法來控制使用者的手指觸控外,也可以用 UIGestureRecognizer 的衍生類別來進行判斷。用 UIGestureRecognizer 的好處在于有現成的手勢,開發者不用自己計算手指移動軌跡。UIGestureRecognizer的衍生類別有以下幾種:
UITapGestureRecognizer
UIPinchGestureRecognizer
UIRotationGestureRecognizer
UISwipeGestureRecognizer
UIPanGestureRecognizer
UILongPressGestureRecognizer
從命名上不難了解這些類別所對應代表的手勢,分別是 Tap(點一下)、Pinch(二指往內或往外撥動)、Rotation(旋轉)、Swipe(滑動,快速移動)、Pan (拖移,慢速移動)以及 LongPress(長按)。這些手勢別在使用上也很簡單,只要在使用前定義并添加到對應的視圖上即可。
?
// 定義一個 recognizer, 并加到需要偵測該手勢的 UIView 元件上
- (void)viewDidLoad {UISwipeGestureRecognizer* recognizer;// handleSwipeFrom 是偵測到手勢,所要呼叫的方法recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom)];// 不同的 Recognizer 有不同的實體變數// 例如 SwipeGesture 可以指定方向// 而 TapGesture 則可以指定次數recognizer.direction = UISwipeGestureRecognizerDirectionUp;[self.view addGestureRecognizer:recognizer];[recognizer release];
}- (void)handleSwipeFrom:(UISwipeGestureRecognizer*)recognizer {// 觸發手勢事件后,在這里作些事情if (recognizer.direction == UISwipeGestureRecognizerDirectionRight){// 當是向右滑動手勢的話,執行對應操作}// 底下是刪除手勢的方法 (提供方法,不過一般沒必要使用)[self.view removeGestureRecognizer:recognizer];
}
操作上應該沒什么難度,幾行代碼的事。
?
其他幾種的使用方法類似,可以自己體驗下。
學習的路上,與君共勉。
?