2009-02-26 5 views
2

Ich baue eine Anwendung auf Canvas, es besteht aus einem einfachen DOM, das bei jeder Mausbewegung neu gezeichnet wird (ja, es ist notwendig), bei Leistungsproblemen wird nicht jeder Teil neu gezeichnet wird gebraucht.Zeichnung Anwendung Zoom Konzept

Die App funktioniert gut, aber ich möchte die Zoom-Funktion, so wie ich es sehe hinzuzufügen, kann es auf drei verschiedene Arten erfolgen:

1 - Jedes DOM-Element neu berechnet wird (Position und Größe) Jedes Mal, wenn ein Benutzer hinein- oder herauszoomt, kann es Probleme mit Genauigkeit geben und es ist keine sehr gute Abstraktion.

2 - Die Zeichenfläche hat eine Auflösungseigenschaft (dh wenn der Benutzer die Auflösung verkleinert, kann sich die Auflösung von 1 zu .75 ändern) - Es wird notwendig sein, die Berechnungen bei jedem Neuaufbau zu machen

3 - Verwenden Sie das integrierte translate() - und scale() -Methode ds - möglicherweise die eleganteste und schnellste Lösung, aber es ist überhaupt nicht intuitiv, es könnte schwierig sein zu verstehen, wie es von mir oder jemand anderem gemacht wird (diese Methoden arbeiten auf der ganzen Leinwand, zuerst würden Sie übersetzen und Maßstab auf der Leinwand und danach wird alles, was du zeichnest, 'magisch' übersetzt und skaliert)

Welches ist das Beste oder gibt es andere Möglichkeiten, an die ich nicht denke?

+0

viel Glück mit dem gesamten Projekt. Das Ding, das Sie bauen, klingt wirklich schwierig. – Natrium

+0

Hallo Vasco, jetzt muss ich das gleiche in meiner App implementieren. Können Sie Ihre Erfahrungen zu diesem Thema teilen? Vielen Dank. –

Antwort

1

Ich würde die eingebauten translate()/scale() -Methoden verwenden. Wenn Sie sich Sorgen um die Leistung und die Qualität einer dieser Methoden machen, sollten Sie versuchen, dies so zu tun, dass Sie sie gegen eine andere der zu vergleichenden Optionen austauschen können, wenn die Ergebnisse für Sie Anlass zur Sorge geben.