我已经想了很长时间了,但我还没有找到合适的答案。
UIGestureRecognizer
在快速/iOS发展中的表现如何?
让我通过给出一个理论例子来解释:您在iPad Pro上有一个应用程序(大屏幕,很大的空间),在那里您可能有几十个不同的views
和buttons
等等。出于任何原因,您需要这些views
和buttons
中的每一个都是可移动的/可点击的/可调整大小的/.
还有什么更好的?
UIGestureRecognizer(s)
向每个视图添加一个(或多个)(这会导致许多主动手势识别器和许多针对每种view
类型的小的、特定的处理方法)。superview
向中添加一个识别器(这会导致一个主动手势识别器和一个大的处理方法,需要循环通过subviews
并确定哪一个已经被点击)我想第一个是最简单的,但它比第二个慢吗?这一点我不太确定。我的胃告诉我,拥有这么多的UIGestureRecognizers
并不是一个好的解决方案。
但无论哪种方式,系统都必须遍历所有的东西(在最坏的情况下),无论是多个识别器还是许多subviews
。我对此很好奇。
谢谢
发布于 2017-06-22 02:36:36
让我们看看您的问题,从手势识别流程->到将事件传递给正确的手势识别系统通过视图树找到与此手势相关的最后一个,这将在UIView - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
的一种特定方法中返回真。
我建议用这种方式。在这种情况下,系统将为您完成大部分工作,并防止您以后很难调试的错误-相信我。这是给UI的。特别是当你有多个不同的手势在一个屏幕的不同部分。在我的特殊情况下,我有一个巨大的视频播放器UI,在一个屏幕上有大约20个手势识别器,并且感觉相当好-- UI没有延迟或帧下降。这种方式简单,自我描述。我建议使用故事板或xib来实现它。您可以参考稍后的任何时间来回忆应该更新哪些识别器来更改UI的行为。由系统保证的这种方法的速度。
这种方法只对多个视图使用一个简单的手势(> 20)。如果您实现一些游戏,用户拿起并粘贴不同形状的砖块,就会发生这种情况。它不适用于常见的UI任务。速度取决于您的实现,基于问题本身,我不建议这样做。这种方法是设计特定的,而不是速度相关的。
https://stackoverflow.com/questions/44695883
复制相似问题