2016-08-20 82 views
-1

對於我自定義的UIView,我已經覆蓋了touchesBegan方法。我告訴它要做的是改變它的圖層的背景顏色:iOS層顏色變化

dispatch_async(dispatch_get_main_queue()){ 
    self.layer.backgroundColor = clr_someCGColor 
} 

它的行爲很奇怪。如果我在風景中快速點擊視圖,它可以完美地完成所有操作,但是如果我在人像中執行此操作,我必須持續一段時間才能看到結果,但是如果我快速點擊,則會立即調用touchesEnded方法。可能是什麼原因導致肖像延遲?

回答

1

刪除dispatch_async包裝。它所做的只是導致延遲(我們不能在主線程上執行,直到你正確地說,水龍頭結束,並且touchesEnded已經來去了)。您在主線程上已經已經,在touchesBegan中,所以不需要這個額外的延遲。

更好的是,使用輕擊手勢識別器。

+0

我第一次遇到問題並將其重新刪除並沒有幫助,我把它放在'dispatch_async'包裝中。 'UITapGestureRecognizer'不能完全控制觸摸事件,我需要將圖層的bg設置爲'clr_active',然後返回到'clr_normal',觸摸結束後 – EBDOKUM

+0

沒問題。但是'dispatch_async'在這裏沒有幫助你。我有一個應用程序,我在這裏做同樣的事情:我有一個輕擊手勢識別器,但我也想在手指向下時在活動外觀和非活動外觀之間切換,所以我使用'touchesBegan'和'touchesEnded',以及它工作正常。問題可能出在你沒有顯示的代碼上 - 但你沒有顯示它,所以現在有辦法知道。 – matt