iOS:为什么touchesBegan在UIView的某个特定区域有一些延迟

时间:2015-11-16 02:28:23

标签: ios swift delay touchesbegan

我正在制作一个自定义键盘,而且我的处境非常奇怪。

我注意到当我在UIView(inputView)的左后方(大约20个像素)处捕捉到事件触摸开始时,我在这里有一些延迟。 我在touchesBegan中执行的任何操作都将比其他区域执行速度慢。

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
{
self.keypop.hidden = false
}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
{
self.keypop.hidden = true
}

这个问题会影响我应用的效果。 在这个示例中,当我触摸左后方时,我不会看到keypop出现,因为self.keypop.hidden在显示时被延迟了。

我不知道为什么,或者这是来自iOS 9的错误? 我已经被困在这个问题上一个星期。

2 个答案:

答案 0 :(得分:6)

这里的答案似乎修复了我们键盘中的相同问题:

UISystemGateGestureRecognizer and delayed taps near bottom of screen

使用以下代码:

override func viewDidAppear(animated: Bool) {
    let window = view.window!
    let gr0 = window.gestureRecognizers![0] as UIGestureRecognizer
    let gr1 = window.gestureRecognizers![1] as UIGestureRecognizer
    gr0.delaysTouchesBegan = false
    gr1.delaysTouchesBegan = false
}

答案 1 :(得分:4)

在我的情况下,我在CollectionView中使用了touchBegan,当我点击时它延迟了触摸 它只需添加此代码即可与我合作

在斯威夫特,

self.collectionView.delaysContentTouches = false
/*delaysContentTouches applies to all UIScrollView instances.*/