iOS學(xué)習(xí)筆記06-手勢識別

一、UIGestureRecognizer簡單介紹

我們已經(jīng)學(xué)習(xí)了觸摸事件處理,但觸摸事件處理起來很麻煩,每個觸摸事件處理都需要實現(xiàn)3個touches方法絮短,比較繁瑣,實際上我們可以使用更加簡單的觸摸事件處理操作昨忆,那就是 手勢識別UIGestureRecognizer 丁频。

手勢識別操作基類UIGestureRecognizer不能直接使用,我們常使用的是它的子類邑贴,這些手勢操作類都繼承自UIGestureRecognizer

常用手勢識別子類:
  • 點按手勢 UITapGestureRecognizer
  • 捏合手勢 UIPinchGestureRecognizer
  • 拖動手勢 UIPanGestureRecognizer
  • 輕掃手勢 UISwipeGestureRecognizer【4個方向分離】
  • 旋轉(zhuǎn)手勢 UIRotationGestureRecognizer
  • 長按手勢 UILongPressGestureRecognizer

二席里、UIGestureRecognizer屬性

對象屬性:
@property (nonatomic , readonly) UIGestureRecognizerState state;/*< 手勢狀態(tài) */
@property (nonatomic , getter=isEnabled) BOOL enabled;/*< 手勢是否可用 */
@property (nonatomic , readonly) UIView *view;/*< 觸發(fā)手勢的視圖 */
@property (nonatomic , assign) BOOL delaysTouchesBegan;/*< 手勢識別失敗前不執(zhí)行觸摸開始事件,默認為NO */
手勢識別狀態(tài)state:
typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {
    UIGestureRecognizerStatePossible,   // 尚未識別是何種手勢操作(但可能已經(jīng)觸發(fā)了觸摸事件)拢驾,默認狀態(tài)
    UIGestureRecognizerStateBegan,      // 手勢已經(jīng)開始奖磁,此時已經(jīng)被識別,但是這個過程中可能發(fā)生變化繁疤,手勢操作尚未完成
    UIGestureRecognizerStateChanged,    // 手勢狀態(tài)發(fā)生轉(zhuǎn)變
    UIGestureRecognizerStateEnded,      // 手勢識別操作完成(此時已經(jīng)松開手指)
    UIGestureRecognizerStateCancelled,  // 手勢被取消咖为,恢復(fù)到默認狀態(tài)
    UIGestureRecognizerStateFailed,     // 手勢識別失敗,恢復(fù)到默認狀態(tài)
    UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded // 手勢識別完成稠腊,同UIGestureRecognizerStateEnded
};
左圖為 **短手勢** 的狀態(tài)轉(zhuǎn)變躁染,右圖為 **長手勢** 的狀態(tài)轉(zhuǎn)變

三、UIGestureRecognizer方法

#pragmX mark 添加觸摸執(zhí)行事件
- (void)addTarget:(id)target action:(SEL)action;
#pragma mark 移除觸摸執(zhí)行事件
- (void)removeTarget:(id)target action:(SEL)action;
#pragma mark 觸摸點的個數(shù)(同時觸摸的手指數(shù))
- (NSUInteger)numberOfTouches;
#pragma mark 在指定視圖中的相對位置
- (CGPoint)locationInView:(UIView*)view;
#pragma mark 觸摸點相對于指定視圖的位置
- (CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView*)view;
#pragma mark 指定一個手勢需要另一個手勢執(zhí)行失敗才會執(zhí)行
- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer;

四架忌、UIGestureRecognizer使用

# 創(chuàng)建手勢識別器對象
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
# 設(shè)置手勢識別器對象的具體屬性
tap.numberOfTapsRequired = 2;  // 連續(xù)敲擊2次 
tap.numberOfTouchesRequired = 2;// 需要2根手指一起敲擊  
# 添加手勢識別器到對應(yīng)的view上
[self.myView addGestureRecognizer:tap]; 
# 監(jiān)聽手勢的觸發(fā)
[tap addTarget:self action:@selector(tapView:)]; 

五吞彤、多手勢沖突

在iOS中,如果一個手勢A的識別部分是另一個手勢B的子部分鳖昌,默認情況下A就會先識別备畦,B就無法識別了,

比如拖動手勢A和輕掃手勢B许昨,輕掃手勢只在手勢結(jié)束狀態(tài)才能執(zhí)行懂盐,而拖動手勢在手勢開始的時候執(zhí)行,這兩個手勢一起觸發(fā)糕档,輕掃手勢就成了犧牲品莉恼。

解決手勢沖突,就是利用一個方法:
-(void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer
該方法指定一個手勢需要另外一個手勢識別失敗才會執(zhí)行

比如解決拖動手勢和輕掃手勢沖突:
// 拖動手勢的執(zhí)行需要右輕掃手勢的失敗為前提
[panGesture requireGestureRecognizerToFail:swipeGestureToRight];
// 拖動手勢的執(zhí)行需要左輕掃手勢的失敗為前提
[panGesture requireGestureRecognizerToFail:swipeGestureToLeft];

六速那、UIGestureRecognizerDelegate代理

代理方法:
#pragma mark 一個控件識別手勢后是否沿著響應(yīng)者鏈條繼續(xù)傳播手勢識別俐银,默認返回NO
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

用該代理方法可以實現(xiàn)兩個不同控件的手勢同時執(zhí)行,需要讓該方法返回YES端仰,手勢識別就能傳遞給不同控件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捶惜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荔烧,更是在濱河造成了極大的恐慌吱七,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹤竭,死亡現(xiàn)場離奇詭異踊餐,居然都是意外死亡,警方通過查閱死者的電腦和手機臀稚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門吝岭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吧寺,你說我怎么就攤上這事窜管。” “怎么了稚机?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵微峰,是天一觀的道長。 經(jīng)常有香客問我抒钱,道長蜓肆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任谋币,我火速辦了婚禮仗扬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蕾额。我一直安慰自己早芭,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布诅蝶。 她就那樣靜靜地躺著退个,像睡著了一般募壕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上语盈,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天舱馅,我揣著相機與錄音,去河邊找鬼刀荒。 笑死代嗤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的缠借。 我是一名探鬼主播干毅,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泼返!你這毒婦竟也來了硝逢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤绅喉,失蹤者是張志新(化名)和其女友劉穎趴捅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霹疫,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡拱绑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丽蝎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猎拨。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屠阻,靈堂內(nèi)的尸體忽然破棺而出红省,到底是詐尸還是另有隱情,我是刑警寧澤国觉,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布吧恃,位于F島的核電站,受9級特大地震影響麻诀,放射性物質(zhì)發(fā)生泄漏痕寓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一蝇闭、第九天 我趴在偏房一處隱蔽的房頂上張望呻率。 院中可真熱鬧,春花似錦呻引、人聲如沸礼仗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽元践。三九已至韭脊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間单旁,已是汗流浹背沪羔。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慎恒,地道東北人任内。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓撵渡,卻偏偏與公主長得像融柬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子趋距,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容