cancelsTouchesInView/delaysTouchesBegan/delaysTouchesEnded
-
(0)首先要知道的是
1.這3個(gè)屬性是作用于GestureRecognizers(手勢(shì)識(shí)別)與觸摸事件之間聯(lián)系的屬性。實(shí)際應(yīng)用中好像很少會(huì)把它們放到一起,大多都只是運(yùn)用手勢(shì)識(shí)別,所以這3個(gè)屬性應(yīng)該很少會(huì)用到。
2.對(duì)于觸摸事件,window只會(huì)有一個(gè)控件來(lái)接收touch。這個(gè)控件是首先接觸到touch的并且重寫(xiě)了觸摸事件方法(一個(gè)即可)的控件
3.手勢(shì)識(shí)別和觸摸事件是兩個(gè)獨(dú)立的事,只是可以通過(guò)這3個(gè)屬性互相影響,不要混淆。
(1)在默認(rèn)情況下(即這3個(gè)屬性都處于默認(rèn)值的情況下),如果觸摸window,首先由window上最先符合條件的控件(該控件記為hit-test view)接收到該touch并觸發(fā)觸摸事件touchesBegan。同時(shí)如果某個(gè)控件的手勢(shì)識(shí)別器接收到了該touch,就會(huì)進(jìn)行識(shí)別。手勢(shì)識(shí)別成功之后發(fā)送觸摸事件touchesCancelled給hit-testview,hit-test view不再響應(yīng)touch。
-
(2)cancelsTouchesInView:
默認(rèn)為YES,這種情況下當(dāng)手勢(shì)識(shí)別器識(shí)別到touch之后,會(huì)發(fā)送touchesCancelled給hit-testview以取消hit-test view對(duì)touch的響應(yīng),這個(gè)時(shí)候只有手勢(shì)識(shí)別器響應(yīng)touch。
當(dāng)設(shè)置成NO時(shí),手勢(shì)識(shí)別器識(shí)別到touch之后不會(huì)發(fā)送touchesCancelled給hit-test,這個(gè)時(shí)候手勢(shì)識(shí)別器和hit-test view均響應(yīng)touch。
-
(3)delaysTouchesBegan:
默認(rèn)是NO,這種情況下當(dāng)發(fā)生一個(gè)touch時(shí),手勢(shì)識(shí)別器先捕捉到到touch,然后發(fā)給hit-testview,兩者各自做出響應(yīng)。如果設(shè)置為YES,手勢(shì)識(shí)別器在識(shí)別的過(guò)程中(注意是識(shí)別過(guò)程),不會(huì)將touch發(fā)給hit-test view,即hit-testview不會(huì)有任何觸摸事件。只有在識(shí)別失敗之后才會(huì)將touch發(fā)給hit-testview,這種情況下hit-test view的響應(yīng)會(huì)延遲約0.15ms。
-
(4)delaysTouchesEnded:
默認(rèn)為YES。這種情況下發(fā)生一個(gè)touch時(shí),在手勢(shì)識(shí)別成功后,發(fā)送給touchesCancelled消息給hit-testview,手勢(shì)識(shí)別失敗時(shí),會(huì)延遲大概0.15ms,期間沒(méi)有接收到別的touch才會(huì)發(fā)送touchesEnded。如果設(shè)置為NO,則不會(huì)延遲,即會(huì)立即發(fā)送touchesEnded以結(jié)束當(dāng)前觸摸。