2016-08-20 72 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