手势反应随着使用而变慢

Posted

技术标签:

【中文标题】手势反应随着使用而变慢【英文标题】:Gesture response slows with use 【发布时间】:2012-01-09 12:16:53 【问题描述】:

我正在使用UIGestureRecognizer 来检测点击或滑动并在我的应用中更改页面。

经过一段时间的使用(可能加载了 50 个奇怪的页面)后,应用开始对手势的响应明显变慢。您可以点按并等待一整秒,以便识别手势。

我检查了我的代码,并不是翻页速度变慢,因为它仍然可以通过其他方式(蓝牙键盘)工作。按钮和菜单的响应也不会变慢。

有谁知道这可能是什么原因造成的?它最终会导致应用程序无法使用。

【问题讨论】:

【参考方案1】:

可能有很多东西。我要做的第一件事是针对应用程序运行仪器并查找泄漏。像这样的减速可能是由于对象被创建但没有被释放造成的。另请注意,泄漏仪器不会收集所有内容。我经常通过查看分配并检查正确数量的实例是否处于活动状态来发现对象泄漏。

【讨论】:

原来我添加了多个手势识别器,但这对于任何应用程序变慢的人来说仍然是一个很好的建议。 感觉会是这样的:-) 非常感谢!我对此很不满意,认为它与 UICollectionView 和 CPU 使用率有关,搜索触摸延迟什么也没找到,必须非常具体才能到达这里 :) 谢谢!!【参考方案2】:

问题解决了!事实证明,每次加载页面时我都在添加新的手势识别器,而没有删除以前的手势识别器。

【讨论】:

【参考方案3】:

我遇到了这个缓慢的转场问题,只有在刷转转场时。我来到这个线程并看到来自@colincameron 的帖子说他在每次加载时都在堆叠手势识别器。

所以我找到了this SO 线程,其中@robmayoff 展示了如何从视图中删除所有手势识别器。您可以将此删除代码添加到您的 prepareForSegue、viewDidDisappear 等

斯威夫特

subview.gestureRecognizers?.forEach(subview.removeGestureRecognizer)

该代码解决了我的慢转问题。

【讨论】:

以上是关于手势反应随着使用而变慢的主要内容,如果未能解决你的问题,请参考以下文章

SetPixel 会随着时间的推移而变慢

当访问遍历记录集时,它是不是会随着索引的增加而变慢,为啥?

有没有办法在反应原生 iOS 中有条件地禁用滑动返回手势?

ios - UITableView 删除按钮不会对手势做出反应

滑动垂直手势无法使用UITableView

iOS解决单击手势和UITableView的点击事件冲突