Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS图层颜色更改_Ios_Swift_Uiview - Fatal编程技术网

iOS图层颜色更改

iOS图层颜色更改,ios,swift,uiview,Ios,Swift,Uiview,对于我的自定义UIView,我已经重写了touchesbreated方法。我告诉它要做的是改变“图层”的背景颜色: dispatch_async(dispatch_get_main_queue()){ self.layer.backgroundColor = clr_someCGColor } 它的行为很奇怪。如果我在横向中快速点击视图,它会做得非常好,但是如果我在纵向中这样做,我必须按住它一段时间才能看到结果,但是如果我快速点击,就会立即调用touchesend方法。造成纵向延迟的原

对于我的自定义UIView,我已经重写了
touchesbreated
方法。我告诉它要做的是改变“图层”的背景颜色:

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

它的行为很奇怪。如果我在横向中快速点击视图,它会做得非常好,但是如果我在纵向中这样做,我必须按住它一段时间才能看到结果,但是如果我快速点击,就会立即调用
touchesend
方法。造成纵向延迟的原因可能是什么?

删除
dispatch\u async
包装器。它所做的只是造成延迟(我们不能在主线程上执行,直到点击结束并且
touchesend
来了又走了,正如您所说的那样)。您已经在主线程的
touchesbeated
中,因此不需要额外延迟


更好的是,使用轻触手势识别器。

我在第一次遇到问题后将其放入
dispatch\u async
包装器中,再次移除它也没有帮助
UITapgestureRecognitizer
无法完全控制触摸事件,我需要将图层的背景设置为
clr\u active
,然后在触摸结束后返回到
clr\u normal
,这很好。但是
dispatch\u async
在这里对您没有帮助。我有一个应用程序,我可以做同样的事情:我有一个轻触手势识别器,但我也想在手指放下时在活动外观和非活动外观之间切换,所以我使用
触摸开始
触摸结束
,效果很好。问题可能存在于您尚未展示的代码中,但您尚未展示它,所以现在有办法知道。