4 Stimmen

Korrektur von verschwommenem Text nach einer CGAffineTransformMakeScale

Ich habe mehrere Ansichten mit vielen UILabels in den Ansichten. (alle in Interface Builder konstruiert).

Ich versuche dann, eine "kleinere" Kopie meiner Ansicht zu erstellen, wenn Sie den Bildschirm zusammenziehen.

Zu diesem Zweck wende ich an:

view.transform = CGAffineTransformMakeScale(.5, .5);

und dann stelle ich auch den Bildausschnitt ein.

Das Problem ist, dass nach der Umwandlung, der Text in allen meinen UILabels "verschwommen" wird. Es bleibt nicht Pixel perfekt, wie es in voller Größe Ansicht ist.

Gibt es eine Möglichkeit, die Pixelung der Etiketten nach der Transformation zu erhöhen?

10voto

Brad Larson Punkte 169275

Das Anwenden einer Transformation auf eine UIView oder CALayer skaliert lediglich die gerasterte Bitmap dieser Ebene oder View. Dies kann dazu führen, dass die resultierenden UI-Elemente unscharf werden, da sie nicht in diesem neuen Maßstab neu gerendert werden.

Wenn Sie wirklich wollen, dass Ihr Text oder Ihre Bilder mit dem neuen Skalierungsfaktor scharf sind, müssen Sie die Größe manuell ändern und sie neu zeichnen lassen, anstatt eine Transformation anzuwenden. Ich habe eine Möglichkeit beschrieben, wie ich dies mit einer UIView, die in einer UIScrollView gehostet wird, in diese Antwort .

Sie könnten eine einzige Methode erstellen, die Ihre Ansichtshierarchie für Ihre Hauptansicht durchläuft, rekursiv den Rahmen jeder Unteransicht liest, diesen verkleinert und dann ein erneutes Zeichnen seines Inhalts erzwingt. Transformationen eignen sich immer noch hervorragend für interaktive Manipulationen oder Animationen, aber Sie können dann am Ende der Manipulation oder Animation eine vollständige manuelle Skalierung und Neuzeichnung auslösen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X