你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開辟之手勢辨認

iOS開辟之手勢辨認

編輯:IOS開發綜合

1、UIGestureRecognizer簡略引見

我們曾經進修了觸摸事宜處置,但觸摸事宜處置起來很費事,每一個觸摸事宜處置都須要完成3個touches辦法,比擬繁瑣,現實上我們可使用加倍簡略的觸摸事宜處置操作,那就是 手勢辨認UIGestureRecognizer 。

手勢辨認操作基類UIGestureRecognizer不克不及直接應用,我們常應用的是它的子類,這些手勢操作類都繼續自UIGestureRecognizer類

經常使用手勢辨認子類:

點按手勢 UITapGestureRecognizer
捏合手勢 UIPinchGestureRecognizer
拖著手勢 UIPanGestureRecognizer
輕掃手勢 UISwipeGestureRecognizer【4個偏向分別】
扭轉手勢 UIRotationGestureRecognizer
長按手勢 UILongPressGestureRecognizer

2、UIGestureRecognizer屬性

對象屬性:


@property (nonatomic , readonly) UIGestureRecognizerState state;/*< 手勢狀況 */
@property (nonatomic , getter=isEnabled) BOOL enabled;/*< 手勢能否可用 */
@property (nonatomic , readonly) UIView *view;/*< 觸發手勢的視圖 */
@property (nonatomic , assign) BOOL delaysTouchesBegan;/*< 手勢辨認掉敗前不履行觸摸開端事宜,默許為NO */

手勢辨認狀況state:


typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {
    UIGestureRecognizerStatePossible,   // 還沒有辨認是何種手勢操作(但能夠曾經觸發了觸摸事宜),默許狀況
    UIGestureRecognizerStateBegan,      // 手勢曾經開端,此時曾經被辨認,然則這個進程中能夠產生變更,手勢操作還沒有完成
    UIGestureRecognizerStateChanged,    // 手勢狀況產生改變
    UIGestureRecognizerStateEnded,      // 手勢辨認操作完成(此時曾經松開手指)
    UIGestureRecognizerStateCancelled,  // 手勢被撤消,恢復到默許狀況
    UIGestureRecognizerStateFailed,     // 手勢辨認掉敗,恢復到默許狀況
    UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded // 手勢辨認完成,同UIGestureRecognizerStateEnded
};

左圖為 短手勢 的狀況改變,右圖為 長手勢 的狀況改變

3、UIGestureRecognizer辦法


#pragmX mark 添加觸摸履行事宜
- (void)addTarget:(id)target action:(SEL)action;
#pragma mark 移除觸摸履行事宜
- (void)removeTarget:(id)target action:(SEL)action;
#pragma mark 觸摸點的個數(同時觸摸的手指數)
- (NSUInteger)numberOfTouches;
#pragma mark 在指定視圖中的絕對地位
- (CGPoint)locationInView:(UIView*)view;
#pragma mark 觸摸點絕對於指定視圖的地位
- (CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView*)view;
#pragma mark 指定一個手勢須要另外一個手勢履行掉敗才會履行
- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer;

4、UIGestureRecognizer應用


# 創立手勢辨認器對象
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
# 設置手勢辨認器對象的詳細屬性
tap.numberOfTapsRequired = 2;  // 持續敲擊2次
tap.numberOfTouchesRequired = 2;// 須要2根手指一路敲擊 
# 添加手勢辨認器到對應的view上
[self.myView addGestureRecognizer:tap];
# 監聽手勢的觸發
[tap addTarget:self action:@selector(tapView:)];

5、多手勢抵觸

在IOS中,假如一個手勢A的辨認部門是另外一個手勢B的子部門,默許情形下A就會先辨認,B就沒法辨認了,

好比拖著手勢A和輕掃手勢B,輕掃手勢只在手勢停止狀況能力履行,而拖著手勢在手勢開端的時刻履行,這兩個手勢一路觸發,輕掃手勢就成了就義品。

處理手勢抵觸,就是應用一個辦法:


-(void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer

該辦法指定一個手勢須要別的一個手勢辨認掉敗才會履行

好比處理拖著手勢和輕掃手勢抵觸:


// 拖著手勢的履行須要右輕掃手勢的掉敗為條件
[panGesture requireGestureRecognizerToFail:swipeGestureToRight];
// 拖著手勢的履行須要左輕掃手勢的掉敗為條件
[panGesture requireGestureRecognizerToFail:swipeGestureToLeft];

6、UIGestureRecognizerDelegate署理

署理辦法:


#pragma mark 一個控件辨認手勢後能否沿著呼應者鏈條持續流傳手勢辨認,默許前往NO
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

用該署理辦法可以完成兩個分歧控件的手勢同時履行,須要讓該辦法前往YES,手勢辨認就可以傳遞給分歧控件

【iOS開辟之手勢辨認】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved