HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了UIGestureRecognizer 的共存大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在 iPhone 或 iPad 的開發中,除了用 touchesBegan / touchesMoved / touchesEnded 這組方法來控制使用者的手指觸控外,也可以用 UIGestureRecognizer 的衍生類別來進行判斷。用 UIGestureRecognizer 的好處在於有現成的手勢,開發者不用自己計算手指移動的軌跡。UIGestureRecognizer的衍生類別有以下數種:

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

從命名上不難了解這些類別所對應代表的手勢,分別是 Tap(點一下)、Pinch(二指往內或往外撥動)、Rotation(旋轉)、Swipe(滑動,快速移動)、Pan (拖移,慢速移動)以及 LongPress(長按)。這些手勢類別在使用上也很簡單,只要在使用前宣告並掛到對應的視圖(UIView)元件上即可。

     
     
@H_616_61@// 宣告一個 recognizer,並加到需要偵測該手勢的 UIView 元件上
- ( void ) viewDidLoad {
     UISwipeGestureRecognizer * recognizer ;
@H_801_88@      @H_616_61@// handleSwipeFrom 是偵測到手勢後,所要呼叫的方法
     recognizer = [[ UISwipeGestureRecognizer alloc ] initWithTarget: self action: @SELEctor ( handleSwipeFrom )];
     @H_616_61@// 不同的 Recognizer 有不同的實體變數
     @H_616_61@// 例如 SwipeGesture 可以指定方向
     @H_616_61@// 而 TapGesture 則可以指定次數
     recognizer . direction = UISwipeGestureRecognizerDirectionUp
     [ self . view addGestureRecognizer: recognizer ];
     [ recognizer release ];
  }
 
  void ) handleSwipeFrom: ( UISwipeGestureRecognizer * ) recognizer {
     @H_616_61@// 觸發手勢事件後,在這裡作些事情
     @H_616_61@// 底下是刪除手勢的方式
     [ self . view removeGestureRecognizer: recognizer ];
  }

問題來了。有些手勢其實是互相關連的,例如 Tap 與 LongPress、Swipe 與 Pan,或是 Tap 一次與 Tap 兩次。當一個 UIView 同時掛上兩個相關連的手勢時,到底我這一下手指頭按的要算是 Tap 還是 LongPress?如果照預設作法來看,只要「先滿足條件」的就會跳出並呼叫對應方法,舉例來說,如果同時註冊了 Pan 跟 Swipe,只要手指頭一移動就會觸發 Pan 然後跳出,因而永遠都不會發生 Swipe;單點與雙點的情形也是一樣,永遠都只會觸發單點,不會有雙點。

那麼這問題有解嗎?有的, UIGestureRecognizer 有個方法叫做 requireGestureRecognizerToFail,他可以指定某一個 recognizer,即便自己已經滿足條件了,也不會立刻觸發,會等到該指定的 recognizer 確定失敗之後才觸發。以同時支援單點擊與雙點擊的作法為例,程式碼如下:

viewDidLoad {
     @H_616_61@// 單擊的 Recognizer
     UITapGestureRecognizer * singleRecognizer ;
@H_801_88@      singleRecognizer = [[ UITapGestureRecognizer alloc ] initWithTarget: self action: @SELEctor ( handleSingleTapFrom )];
     singleTapRecognizer . numberOfTapsrequired = 1 ; @H_616_61@// 單擊
     [ self . view addGestureRecognizer: singleRecognizer ];
    
     @H_616_61@// 雙擊的 Recognizer
     UITapGestureRecognizer * double ;
     doubleRecognizer @SELEctor ( handleDoubleTapFrom )];
     doubleTapRecognizer . numberOfTapsrequired 2 ; @H_616_61@// 雙擊
     [ self . view addGestureRecognizer: doubleRecognizer ];
    
     @H_616_61@// 關鍵在這一行,如果雙擊確定偵測失敗才會觸發單擊
     [ singleRecognizer requireGestureRecognizerToFail: doubleRecognizer ];
     [ singleRecognizer release ];
     [ doubleRecognizer release ];
}

大佬总结

以上是大佬教程为你收集整理的UIGestureRecognizer 的共存全部内容,希望文章能够帮你解决UIGestureRecognizer 的共存所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:共存
猜你在找的HTML5相关文章