0

今、私は自分のプログラムにボトルネックがあります。ピンチジェスチャを使用してUIImageのスケールを制御しようとしています。プログラムの速度が低下し、途切れ途切れになる原因となるスケールの計算。以下は方程式です。

currentScale = (currentDistance / initialDistance) * scaleMod;

scaleModは、ユーザーが画面から指を離した現在のスケールです。したがって、次にユーザーがピンチを行うときは、基本的に古いスケールが新しいスケーリングアクションの開始点になります。

4

6 に答える 6

2

scaleMod / initialDistance1) currentDistanceが変化しているときに一度計算することはできません。そうすれば、その値にcurrentDistanceを掛けただけで、除算が削除されます。

2)これが実際にボトルネックであることを確認してください。あなたが本当に間違ったことをしているのでない限り、そうではないでしょう。

于 2010-01-27T19:45:16.740 に答える
2

3つの変数のどのタイプでも、この計算はパフォーマンスにほとんど影響を与えることなく、1秒間に数百万回簡単に実行できます。あなたの問題は他の場所にあります。

于 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(または他の整数)を使用して計算を行っている場合は、float精度を使用して計算できるかどうかを確認してください。浮動小数点除算は整数よりも高速です(CPUを想定すると、除算するビット数が少なくなります)。浮動小数点ユニットがあります)。

また、逆数による乗算として除算を除外してみてください。

于 2010-01-27T19:59:50.793 に答える
0

InitialDistance!= 0を最初に確認してください!:)

于 2010-01-28T18:20:01.800 に答える