0

现在我在我正在尝试编写的程序中遇到了瓶颈。我正在尝试使用捏合手势来控制 UIImage 的比例。它的规模计算导致程序变慢并变得不稳定。下面是等式。

currentScale = (currentDistance / initialDistance) * scaleMod;

scaleMod 是用户将手指从屏幕上移开的当前比例。所以下一次用户捏旧的比例实际上是新的缩放动作的起点。

4

6 回答 6

2

scaleMod / initialDistance1)当 currentDistance 改变时,你不能计算一次。这样,您只需将该值乘以 currentDistance,即可消除分歧。

2)确保这实际上是瓶颈。它很可能不是,除非你做错了什么。

于 2010-01-27T19:45:16.740 回答
2

对于这三种变量中的任何一种,这种计算可以很容易地每秒完成数百万次,而对性能的影响很小。你的问题在别处。

于 2010-01-27T20:02:38.480 回答
1

如果将 scaleMod 和 initialDistance 固定为 2 的幂,则可以使用移位来加快乘法和除法。

请参阅此处以供参考

于 2010-01-27T19:54:19.763 回答
0

您可以存储 scaleMod / initialDistance。当缩放处于活动状态时(用户的手指仍在屏幕上),根据需要将该值乘以 currentDistance。

用户完成捏合后,存储新的 scaleMod / initialDistance 值以供下次捏合时使用。

于 2010-01-27T19:46:10.187 回答
0

如果您正在使用 int (或其他整数)进行计算,请查看他是否可以使用浮点精度进行计算。浮点除法比整数快(要除的位数更少,假设您的 CPU)具有浮点单元)。

另外,尝试将除法分解为乘以倒数。

于 2010-01-27T19:59:50.793 回答
0

首先检查 InitialDistance != 0 !:)

于 2010-01-28T18:20:01.800 回答