Event handling Guide in iOS

連續(xù)手勢和非連續(xù)手勢

連續(xù)手勢 非連續(xù)手勢
UITapGestureRecognizer UIPinchGestureRecognizer,UIPanGestureRecognizer ,UISwipeGestureRecognizer,UIRotationGestureRecognizer,UILongPressGestureRecognizer

連續(xù)手勢和非連續(xù)手勢狀態(tài)變化

有限狀態(tài)機(jī)
連續(xù)手勢和非連續(xù)手勢狀態(tài)變化

跟事件響應(yīng)鏈來比剂癌,GestureRecognizer對touch的響應(yīng)有更高的優(yōu)先級

當(dāng)觸摸事件發(fā)生時(shí),UITouches 觸摸對象會(huì)先由 UIApplication 對象傳遞給UIWindow 對象翰绊,然后佩谷,首先傳遞給點(diǎn)擊視圖的GestureRecognizer,再傳遞給視圖的事件響應(yīng)鏈监嗜。
UIWindow 對象會(huì)延遲將“觸摸”對象發(fā)送給視圖對象谐檀,從而讓手勢識(shí)別器最先對“觸摸”進(jìn)行分析處理。在延遲期間裁奇,如果識(shí)別器識(shí)別出來觸摸手勢桐猬,UIWindow 對象就不會(huì)將“觸摸對象”傳遞給視圖對象了,并將識(shí)別出來的手勢序列中其他之前本該發(fā)送給視圖對象的觸摸對象Cancel掉刽肠。

UITouch傳遞路徑

例如雙擊事件調(diào)用過程


雙擊事件調(diào)用過程(第一行為UIWindow的GestureRecognizer)

申明兩個(gè)識(shí)別器的特定順序

假設(shè)開發(fā)者想要識(shí)別用戶的“滑動(dòng)”(swipe)手勢和“平移”(pan)手勢溃肪,而這兩個(gè)手勢需要觸發(fā)兩個(gè)不同的消息。默認(rèn)情況下五垮,當(dāng)用戶進(jìn)“滑動(dòng)”(swipe)操作時(shí)乍惊,這個(gè)手勢會(huì)被默認(rèn)識(shí)別為“平移”(pan)。這是因?yàn)椤盎瑒?dòng)”手勢操作在被系統(tǒng)識(shí)別為“滑動(dòng)”手勢(這是一個(gè)持久的連續(xù)性手勢)之前放仗,系統(tǒng)進(jìn)行判斷時(shí)润绎,發(fā)現(xiàn)其操作行為完全符合“平移”(這是一個(gè)瞬發(fā)的非持續(xù)手勢)操作的所有必要的屬性條件,所以系統(tǒng)就將其識(shí)別為“平移”诞挨。

如果開發(fā)者想要其視圖對象同時(shí)識(shí)別這兩個(gè)手勢莉撇,就需要先讓“滑動(dòng)”手勢識(shí)別器先對手勢操作進(jìn)行識(shí)別,然后進(jìn)行“平移”操作的識(shí)別惶傻。假如“滑動(dòng)”手勢確定用戶的手勢觸摸操作為“滑動(dòng)”棍郎,另外一個(gè)手勢識(shí)別器就不需要繼續(xù)分析了。如果“滑動(dòng)”識(shí)別器分析發(fā)現(xiàn)用戶手勢操作不是非持續(xù)的“滑動(dòng)”手勢银室,就會(huì)轉(zhuǎn)向失敗狀態(tài)涂佃,此時(shí)励翼,平移手勢就開始對用戶操作進(jìn)行分析了

- (void)viewDidLoad {
 [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib
[self.panRecognizer requireGestureRecognizerToFail:self.swipeRecognizer];
}

禁止GestureRecognizer 截獲觸摸事件

默認(rèn)情況下,GestureRecognizer會(huì)阻斷事件響應(yīng)鏈中的touch傳遞辜荠,即
UIGestureRecognizerDelegate中的

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

返回YES汽抚,表示touch在GestureRecognizer識(shí)別成功后會(huì)在事件響應(yīng)鏈中走touch Cancel
如果想讓touch在GestureRecognizer識(shí)別成功后仍然走到touchEnd,即GestureRecognizer和事件響應(yīng)鏈同時(shí)進(jìn)行(GestureRecognizer不截獲touch)伯病,那只需要在這個(gè)代理方法中返回NO
常見用法:
父視圖綁定的gestureRecognizer會(huì)截獲touch在子視圖響應(yīng)鏈的傳遞造烁,導(dǎo)致子視圖無點(diǎn)擊效果

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
//只有g(shù)estureRecognizer綁定的view會(huì)截獲touch,阻止touch在事件響應(yīng)鏈中的傳遞
    if (touch.view == gestureRecognizer.view)
    {
        return YES;
    }
//gestureRecognizer綁定view的子視圖仍然會(huì)接收到事件響應(yīng)鏈傳來的touch午笛,并走到touchEnd
    return NO;
}

UIControl的特殊性

gestureRecognizer識(shí)別是通過事件傳遞流程逐層下發(fā)惭蟋,但是如果發(fā)現(xiàn)點(diǎn)擊事件的view是UIControl或者其子類,則直接由UIWindow下發(fā)事件药磺,即UIControl比gestureRecognizer優(yōu)先級更高告组,如果UIControl既有g(shù)estureRecognizer,也有target-action癌佩,優(yōu)先響應(yīng)target-action惹谐,適用于以下情況:
? 單根手指在 UIButton,UISwitch驼卖,UIStepper,UISegementedControl 和 UIPageControl
上的單擊事件鸿秆。
? 單根手指在 UISlider 的滑塊按鈕上并且和 UISlider 控件平行方向上的滑動(dòng)操作酌畜。
? 單根手指在 UISwitch 滑塊按鈕上并且和 UISwitch 控件同水平方向上的平移操作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卿叽,一起剝皮案震驚了整個(gè)濱河市桥胞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌考婴,老刑警劉巖贩虾,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沥阱,居然都是意外死亡缎罢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門考杉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來策精,“玉大人,你說我怎么就攤上這事崇棠⊙释啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵枕稀,是天一觀的道長询刹。 經(jīng)常有香客問我谜嫉,道長,這世上最難降的妖魔是什么凹联? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任沐兰,我火速辦了婚禮,結(jié)果婚禮上匕垫,老公的妹妹穿的比我還像新娘僧鲁。我一直安慰自己,他們只是感情好象泵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布寞秃。 她就那樣靜靜地躺著,像睡著了一般偶惠。 火紅的嫁衣襯著肌膚如雪春寿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天忽孽,我揣著相機(jī)與錄音绑改,去河邊找鬼。 笑死兄一,一個(gè)胖子當(dāng)著我的面吹牛厘线,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播出革,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼造壮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了骂束?” 一聲冷哼從身側(cè)響起耳璧,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎展箱,沒想到半個(gè)月后旨枯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡混驰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年攀隔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片账胧。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡竞慢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出治泥,到底是詐尸還是另有隱情筹煮,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布居夹,位于F島的核電站败潦,受9級特大地震影響本冲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜劫扒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一檬洞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沟饥,春花似錦添怔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幼驶,卻和暖如春艾杏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盅藻。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工购桑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氏淑。 一個(gè)月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓勃蜘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親假残。 傳聞我的和親對象是個(gè)殘疾皇子元旬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355

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