Unterschiede iPhone Leistung in Quarz-Zeichnung vs. vorgebrannt Bilder (die ich Vereinfacht zu Quarz vs. Quarz erraten)

StackOverflow https://stackoverflow.com/questions/1604341

Frage

Neu bei Quarz und ich bin auf den Ziehgeschwindigkeiten von einfachen Formen, Verläufe und Schatten neugierig; speziell Quarz Zeichenfunktionen auf Quarz-Bild Zeichnung auf dem iPhone zu vergleichen.

Nehmen wir an, ich brauche ein gefülltes zu ziehen, streichelte und beschattet Rechteck. Ich gehe davon aus, dass eine vorgebackene rect als PNG-Import und zeichnen es drawInRect mit: oder drawAtPoint: schneller als Quartz Zeichnung Funktionen unter Verwendung der gleichen Sache zu ziehen, da diese explizite Berechnungen erfordert. Auf der anderen Seite, ein Bild zeichnet Ich gehe davon erhöht die Speichernutzung und Anwendungsgröße, da ich das Bild importieren und Alloc es dann. Klingt das nicht wahr?

Daneben gibt es große Vorteile / Nachteile zu jeder Technik? Als jemand, der mit Grafikprogrammen und brandneu Quartz sehr vertraut ist, ich versuche, wenn es zu entscheiden, sind die Zeichenfunktionen in meinem Code irgendwelche Vorteile bei der Verwendung im Gegensatz zu den gesamten UI Vorbacken und die Bilder zu importieren.

War es hilfreich?

Lösung

Ich hatte eine ähnliche Frage, so timed ich die verschiedenen Ansätze aus. In den meisten Fällen einfachen Zeichnung (wie Ihr Rechteck Beispiel), schien ein Bild von der Festplatte geladen etwas langsamer zu sein als eine Zeichnung, vielleicht aufgrund des Plattenzugriff erforderlich. In diesen Fällen habe ich über die Verwendung der Quarz-Zeichenroutinen nieder, einfach wegen der Flexibilität, die sie mir geben. Wenn ich die Größe eines UI-Element in der Zukunft ändern will (vielleicht ein größeres oder höher auflösendes Display zu unterstützen), würde ich brauchen, um alle meine Bilder wieder zu machen, wo die Vektorzeichnungen werden nach Bedarf skaliert werden.

Ein Bereich, wo ich ein deutlicher Leistungs Sieg sah für eine große radialen Gradienten ist, die ich als Hintergrund zeichnen. In Shark, konnte ich sehen, dass die CGContextDrawRadialGradient () -Aufruf viel CPU-Zeit Kauen wurde. Als ich die Quartz-drawn radialen Gradienten mit einem statischen Bild ersetzt, sah ich eine deutliche Reduzierung der Anwendungsstartzeit (vor diesem Hintergrund bei Start der Anwendung platziert wird). Merkwürdig ist, dass ich sah auch eine Verringerung der Anwendungsspeichernutzung um etwa 0,5 MB, das kann ich nicht vollständig erklären.

Wenn Sie sich dies testen wollen, empfehle ich Kommissionierung bis hoch den Bildeditor Opazität , die erzeugen kann Quarz-Code für eine Zeichnung (einschließlich einer vollständigen UIView oder CALayer Unterklasse), sowie Ausgang eines PNG der gleichen Zeichnung. Dies macht es trivial beiden Pfade in Ihrer Anwendung zu implementieren und testen sie aus.

Andere Tipps

Es gibt auch einen Mittelweg, die je nach Anwendungsstruktur funktionieren könnte: den Zeichencode implementieren, sondern in eine Schicht zeichnen, und wieder verwenden es dann. Dies hat den Vorteil, dass keine CPU-Zeit Kauen mehr als einmal, aber immer noch den Ziehprozess dynamisch zu halten.

Also, sagen wir, wenn die Tablette schließlich Schiffe (jetzt jeden Tag !!), können Sie Ihre Zeichnung Parameter ein wenig decken alle möglichen Geräte überarbeiten können, anstatt eine Reihe von verschiedenen statischen Bildern zu erzeugen.

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