關(guān)于手勢的幾個屬性的記錄
關(guān)于iOS的事件響應(yīng)者鏈的關(guān)系hit-testting 尋找最佳響應(yīng)者大家應(yīng)該不陌生.但是找到最佳響應(yīng)者之后,這個touch事件是由手勢來消費還是由touch方法優(yōu)先消費.可能好多人還不太清除呢.
關(guān)于這個點,蘋果官方文檔是有解釋的,touch事件會優(yōu)先交給手勢識別,只有手勢識別失敗之后才會將touch事件交給touch方法消費.
不過很多時候這種默認(rèn)的處理方式并不能完全滿足我們的需求,所以系統(tǒng)手勢有三個屬性,可以改變這一個默認(rèn)的行為
手勢的屬性
delaysTouchesBegan 屬性
這個屬性默認(rèn)值為NO,意思就是無論touch事件是交給手勢識別還是交給touch方法消費,都會調(diào)用touchBegan事件.當(dāng)這個屬性設(shè)置為YES的時候,系統(tǒng)會優(yōu)先把事件交給手勢,只有手勢識別失敗之后才會將touch事件交給touchBegan方法
delaysTouchesEnded 屬性
delaysTouchesEnded 屬性默認(rèn)為YES,意思就是touch事件會優(yōu)先由手勢識別,只有手勢識別失敗之后才將touch事件交給touchend方法.系統(tǒng)這樣做是為了確保手勢可以取消
cancelsTouchesInView 屬性
cancelsTouchesInView 默認(rèn)值為Yes,意味著當(dāng)手勢系統(tǒng)識別手勢成功后,回調(diào)touchCancel方法,取消touch事件的傳遞 .當(dāng)改為NO 后系統(tǒng)不會回調(diào)touchCancel方法
這三個屬性可以在我們處理手勢和touch事件的時候加以利用,例如我們熟知的IQKeyboardManager這個框架就是利用了cancelsTouchesInView屬性使得手勢事件可以最后傳遞到它加到window上的Tap手勢,從而控制鍵盤的起落