Ios Swift-当具有多个“UIgestureRecognitor”时的性能

Ios Swift-当具有多个“UIgestureRecognitor”时的性能,ios,swift,performance,uigesturerecognizer,Ios,Swift,Performance,Uigesturerecognizer,我已经想了很长时间了,但我还没有找到一个合适的答案 在swift/iOS开发中,uigestureRecognitor的性能如何 让我举一个理论例子来解释: 你在iPad Pro上有一个应用程序(大屏幕,大空间),在那里你可能有几十个不同的视图和按钮等等。无论出于何种原因,您都需要这些视图和按钮可移动/可单击/可调整大小/ 什么更好 向每个视图添加一个(或多个)UIgestureRecognitor(这会导致许多活动手势识别器和许多小型、特定的处理方法[可能针对每种类型的视图进行分组)) 将一

我已经想了很长时间了,但我还没有找到一个合适的答案

在swift/iOS开发中,
uigestureRecognitor
的性能如何

让我举一个理论例子来解释: 你在iPad Pro上有一个应用程序(大屏幕,大空间),在那里你可能有几十个不同的
视图
按钮
等等。无论出于何种原因,您都需要这些
视图
按钮
可移动/可单击/可调整大小/

什么更好

  • 向每个视图添加一个(或多个)
    UIgestureRecognitor
    (这会导致许多活动手势识别器和许多小型、特定的处理方法[可能针对每种类型的
    视图进行分组)
  • 将一个识别器添加到
    superview
    (这会产生一个活动的手势识别器和一个大的处理方法,需要在
    子视图中循环,并确定哪个被点击)
我想第一个是最简单的,但是它比第二个慢吗?我不确定。我的胃告诉我,拥有那么多的
UIgestureRecognitors
不是一个好的解决方案

但无论哪种方式,系统都必须循环处理所有内容(在最坏的情况下),无论是多个识别器还是多个子视图。我对此很好奇


谢谢

让我们从手势识别流程的角度来看看您的问题->将事件传递到正确的手势识别系统通过视图树查找此手势的最后一个特定图标,该图标将在UIView的特定方法中返回true
-(UIView*)hitTest:(CGPoint)pointwithevent:(UIEvent*)event

  • 向每个视图添加一个(或多个)UIgestureRecognitor
我推荐用这种方法。在这种情况下,系统将为您完成大部分工作,并防止您出现以后很难调试的错误-相信我。这是用于用户界面的。尤其是当你在屏幕的不同部分有多个不同的手势时。在我的特殊情况下,我有一个巨大的视频播放器UI,在一个屏幕上有大约20个手势识别器,感觉非常好——UI中没有延迟或帧下降。这种方式简单且自我描述。我建议使用故事板或xib实现它。您可以参考Interface Builder,稍后随时回忆您应该更新什么识别器来更改UI的行为。该方法的速度由系统保证

  • 向superview添加一个识别器

对于多个视图(更多>20个),这种方法只能与一个简单的手势配合使用。例如,如果您实现一些游戏,其中用户拾取并粘贴不同形状的砖块,则可能会发生这种情况。它不适用于常见的UI任务。速度取决于您的实现,基于问题本身,我不建议这样做。这种方法是特定于设计的,与速度无关。

>>无论出于何种原因,您都需要这些视图和按钮中的每一个都是可移动/可单击/可调整大小的/。。。你需要它在一瞬间为所有项目或基于某些状态,只有其中的一部分必须是可移动/可点击/可调整大小/?“(…)给你一个理论上的例子(…)”-它不是具体或真实的东西,我没有用它或其他东西制作应用程序。这是理论上最糟糕的情况,在这种情况下,您需要能够移动/单击/调整屏幕上看到的每个视图的大小。不是一刻一刻,而是永远,基本上。在任何给定的时刻,您都应该能够移动/点击/。。。任何你想看的风景。