现在我在我正在尝试编写的程序中遇到了瓶颈。我正在尝试使用捏合手势来控制 UIImage 的比例。它的规模计算导致程序变慢并变得不稳定。下面是等式。
currentScale = (currentDistance / initialDistance) * scaleMod;
scaleMod 是用户将手指从屏幕上移开的当前比例。所以下一次用户捏旧的比例实际上是新的缩放动作的起点。
现在我在我正在尝试编写的程序中遇到了瓶颈。我正在尝试使用捏合手势来控制 UIImage 的比例。它的规模计算导致程序变慢并变得不稳定。下面是等式。
currentScale = (currentDistance / initialDistance) * scaleMod;
scaleMod 是用户将手指从屏幕上移开的当前比例。所以下一次用户捏旧的比例实际上是新的缩放动作的起点。
scaleMod / initialDistance
1)当 currentDistance 改变时,你不能计算一次。这样,您只需将该值乘以 currentDistance,即可消除分歧。
2)确保这实际上是瓶颈。它很可能不是,除非你做错了什么。
对于这三种变量中的任何一种,这种计算可以很容易地每秒完成数百万次,而对性能的影响很小。你的问题在别处。
如果将 scaleMod 和 initialDistance 固定为 2 的幂,则可以使用移位来加快乘法和除法。
请参阅此处以供参考。
您可以存储 scaleMod / initialDistance。当缩放处于活动状态时(用户的手指仍在屏幕上),根据需要将该值乘以 currentDistance。
用户完成捏合后,存储新的 scaleMod / initialDistance 值以供下次捏合时使用。
如果您正在使用 int (或其他整数)进行计算,请查看他是否可以使用浮点精度进行计算。浮点除法比整数快(要除的位数更少,假设您的 CPU)具有浮点单元)。
另外,尝试将除法分解为乘以倒数。
首先检查 InitialDistance != 0 !:)