Frage

jetzt habe ich einen Flaschenhals in meinem Programm, das ich zu schreiben bin versucht. Ich versuche, eine Pinch-Geste zu verwenden, um den Umfang eines UIImage zu steuern. das die Berechnung der Skala, die das Programm verursacht abgehackt zu verlangsamen und wird. unten ist die Gleichung.

currentScale = (currentDistance / initialDistance) * scaleMod;

scaleMod ist, was auch immer die aktuelle Skala war der Benutzer nahm ihre Finger aus dem Bildschirm. so das nächste Mal muss der Benutzer kneift eine der alte Skala im wesentlichen der Ausgangspunkt der neuen Skalierung Aktion ist.

War es hilfreich?

Lösung

1) Können Sie nicht berechnen einmal scaleMod / initialDistance während currentDistance verändert. So können Sie nur diesen Wert mal currentDistance zu tun haben, die eine Kluft entfernt.

2) Stellen Sie sicher, dass dies tatsächlich der Engpass ist. Es ist höchstwahrscheinlich nicht, es sei denn Sie wirklich etwas falsch zu machen.

Andere Tipps

Für jede Art der drei Vars, kann diese Berechnung leicht Millionen Mal pro Sekunde mit wenig Auswirkungen auf die Leistung erfolgen. Ihr Problem ist anderswo.

Wenn Sie die scaleMod und initialDistance auf Potenzen von 2 fixieren Sie Verschiebungen für eine schnellere Multiplikation und Division nutzen könnten.

Siehe hier als Referenz .

Sie könnten scaleMod / initialDistance speichern. Wenn Skalierung aktiv (die Finger des Benutzers sind immer noch auf dem Bildschirm), multiplizieren Sie diesen Wert durch currentDistance nach Bedarf.

Sobald der Benutzer fertig Einklemmen hat, speichern Sie die neue scaleMod / initialDistance Wert für das nächste Mal passiert, Kneifen.

Wenn Sie die Berechnung mit int tun (oder eine andere ganze Zahl ist), ob er es float Präzision mit tun kann. Gleitkommadivisionen ist schneller als ganze Zahl (weniger Bits zu teilen, vorausgesetzt, Ihre CPU) hat Gleitkommaeinheit).

Versuchen Sie auch, zu Faktor heraus Division als Multiplikation mit einer reziprok.

Überprüfen Sie, ob InitialDistance! = 0 zuerst! :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top