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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

手势识别

發布時間:2025/4/16 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手势识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
所有的手勢操作都繼承于UIGestureRecognizer,這個類本身不能直接使用 IOS有六種手勢操作 手勢說明
UITapGestureRecognizer點按手勢
UIPinchGestureRecognizer捏合手勢
UIPanGestureRecognizer拖動手勢
UISwipeGestureRecognizer輕掃手勢,支持四個方向的輕掃,但是不同的方向要分別定義輕掃手勢
UIRotationGestureRecognizer旋轉手勢
UILongPressGestureRecognizer長按手勢
備注: 1、UIImageView默認是不支持交互的,也就是userInteractionEnabled=NO ,因此要接收觸摸事件(手勢識別),必須設置 ?? userInteractionEnabled=YES(在iOS中UILabel、UIImageView的userInteractionEnabled默認都是NO,UIButton、UITextField、? UIScrollView、UITableView等默認都是YES) 2、輕掃手勢雖然是連續手勢但是它的操作事件只會在識別結束時調用一次,其他連續手勢都會調用多次,一般需要進行狀態判斷;此外輕 掃手勢支持四個方向,但是如果要支持多個方向需要添加多個輕掃手勢 3、手勢沖突

? ? ? ? 沖突的原因很簡單,拖動手勢的操作事件是在手勢的開始狀態(狀態1)識別執行的,而輕掃手勢的操作事件只有在手勢結束狀態(狀

? ? ? ? ?態3)才能執行,因此輕掃手勢就作為了犧牲品沒有被正確識別。我們理想的情況當然是如果在圖片上拖動就移動圖片,如果在圖片上?

? ? ? ? 輕掃就翻動圖片。如何解決這個沖突呢?

? ? ? ? 在iOS中,如果一個手勢A的識別部分是另一個手勢B的子部分時,默認情況下A就會先識別,B就無法識別了。要解決這個沖突可以利?

? ? ? ? 用- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer;方法來完成。這個方法可

? ? ? ? 以指定某個手勢執行的前提是另一個手勢失敗才會識別執行。也就是說如果我們指定拖動手勢的執行前提為輕掃手勢失敗就可以了,這

? ? ? ? 樣一來當我們手指輕輕滑動時系統會優先考慮輕掃手勢,如果最后發現該操作不是輕掃,那么就會執行拖動。只要將下面的代碼添加到

? ? ? ? ?添加手勢之后就能解決這個問題了。例如:[panGesture requireGestureRecognizerToFail:swipeGestureToRight];

UIGestureRecognizer這個類中定義了這幾種手勢共有的一些屬性和方法(下表僅列出常用屬性和方法):

名稱說明
屬性
@property(nonatomic,readonly) UIGestureRecognizerState state;手勢狀態
@property(nonatomic, getter=isEnabled) BOOL enabled;手勢是否可用
@property(nonatomic,readonly) UIView *view;觸發手勢的視圖(一般在觸摸執行操作中我們可以通過此屬性獲得觸摸視圖進行操作)
@property(nonatomic) BOOL delaysTouchesBegan;手勢識別失敗前不執行觸摸開始事件,默認為NO;如果為YES,那么成功識別則不執行觸摸開始事件,失敗則執行觸摸開始事件;如果為NO,則不管成功與否都執行觸摸開始事件;
方法
- (void)addTarget:(id)target action:(SEL)action;添加觸摸執行事件
- (void)removeTarget:(id)target action:(SEL)action;移除觸摸執行事件
- (NSUInteger)numberOfTouches;觸摸點的個數(同時觸摸的手指數)
- (CGPoint)locationInView:(UIView*)view;在指定視圖中的相對位置
- (CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView*)view;觸摸點相對于指定視圖的位置
- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer;指定一個手勢需要另一個手勢執行失敗才會執行
代理方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;一個控件的手勢識別后是否阻斷手勢識別繼續向下傳播,默認返回NO;如果為YES,響應者鏈上層對象觸發手勢識別后,如果下層對象也添加了手勢并成功識別也會繼續執行,否則上層對象識別后則不再繼續傳播;

轉載于:https://www.cnblogs.com/hepingqingfeng/p/5462714.html

總結

以上是生活随笔為你收集整理的手势识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。