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