更新:隨着羞恥的臉紅,我發現訂單與竊聽速度無關。在超級touchesEnded:withEvent調用之前,我正在調用視覺代碼,這就是爲什麼如果你點擊得非常快,顯示器再也沒有機會繪製突出顯示的狀態,然後再次被解散。因爲實際上導致主線程阻塞幾毫秒的代碼,突出顯示的狀態將保持可見狀態,直到主線程再次解除阻塞爲止,在這種情況下,如果您敲擊得非常快,看起來好像什麼也沒有發生。將超級調用移至覆蓋的方法的頂部可以解決所有問題。對不起,如果任何版主看到這個帖子,它可以被刪除。 恥爲什麼touchesBegan,target-action和touchesEnded的執行順序會隨着UIButton的快速觸碰而改變?
這個問題必須被問過1000次在SO,但我找不到解釋來匹配我的具體問題。
我有一個定製設計的UIButton子類。當然,這個設計足夠定製,我不能只使用常規的setSomething:forControlState:
方法。我需要觸摸不同的背景顏色,以及需要閃爍的一些圖標。在調用它們各自的超級方法之前,爲了實現這些視圖更改,我(反直覺地)將顯示代碼放入(A)touchesBegan:withEvent
和(Z)touchesEnded:withEvent:
中。感覺怪異,但它按預期工作,或者起初看起來如此。
執行addTarget:action:forControlEvents
後用於將UIControlEventTouchUpInside
綁定到方法(X)itemTapped:
,我希望這些方法總是以(A)(X)(Z)的順序觸發。但是,如果您真正快速點擊屏幕(或模擬器中的鼠標),它們將按照(A)(Z)(X)的順序點亮。 (A)和(Z)在如此快速連續的情況下彼此追隨,整個視覺反饋用於竊聽是不可見的。這是不想要的行爲。這也不是要走的路,因爲許多應用程序需要類似的行爲,對吧?
所以我對你的問題是:我做錯了什麼?我猜測的一件事是,按鈕的外觀不應該在touchesBegan:withEvent
和touchesEnded:withEvent
中操作,但是在哪裏?或者我錯過了其他一些衆所周知的事實?
感謝您的推動, 埃裏克保羅。
只是好奇,如果我快速觸摸3次,是命令AZXAZXAZX或別的什麼? – TahoeWolverine 2011-01-31 19:57:19
AZX AZX AZX,非常好的重現性。在觸發目標動作之前發生了修改,儘管我認爲目標動作是由[super touchesEnded:withEvent]觸發的。 – epologee 2011-01-31 20:17:47