2009-05-25 2 views

Antwort

19

Ich würde gerne mehr Informationen darüber, wo Sie das sehen, aber mein Verdacht ist, dass es sich auf ein Bild bezieht, das nicht Pixel ausgerichtet ist. Mit Quartz können Sie mit gebrochenen Pixeln zeichnen (erinnern Sie sich daran, dass CGPoint CGFloats, nicht NSIntegers verwendet), aber es ist teurer und neigt dazu, ein wenig Unschärfe zu erzeugen. Sie können nicht wirklich auf einen Bruchteil eines Pixels zeichnen, also muss Quartz Anti-Aliasing durchführen, um es zu entfernen. Das kostet Zeit und würde sicherlich die Leistung der Core Animation beeinträchtigen.

Quartz warnt Sie nicht, dass Sie mit Bruchpixeln arbeiten, und es ist besonders unfreundlich zu Text. Es ist also etwas, worüber man nachdenken muss, wenn man ein programmatisches Layout macht.

+2

Yup, das ist, was fehlausgerichtete Bild bedeutet. – Kriem

+0

Danke für den Hinweis. In der Tat hatte ich Gleitkommawerte für Frame-Koordinaten. Nach dem Umwickeln mit einem Stockwerk() verschwand die Nachricht in Insturment. Aber ich konnte keine Leistungsverbesserung erkennen. Instrumente beschweren sich darüber auch, wenn ein UIImageView gedreht wird. Also ich denke, es ist nichts zu schlecht;) – Thanks

+0

Es ist wahr, wenn eine Skalierung auftritt - zum Beispiel, wenn die Breite oder Höhe einer Bildansicht nicht mit den Quellbildgrenzen übereinstimmt, oder wenn eine Ansicht eine affine Transformation angewendet hat. –

2

Falsch ausgerichtete Ansichten zwingen den Renderer, vor dem Zeichnen Antialias zu verwenden. In diesem Kontext bedeutet "fehlausgerichtet", dass der angeforderte Anzeigepunkt nicht direkt einem Bildschirmpixel zugeordnet wird (z. B. zwischen zwei Pixeln) und daher zu zwei benachbarten Pixeln gezogen und mit Antialiasing versehen werden muss um die Illusion zu geben, dass sie "zwischen" ihnen gezogen wurde.

Dies geschieht fast immer, wenn der Rahmen einer Ansicht berechnet (und nicht in Interface Builder angegeben) wird, da die X-Koordinate, Y-Koordinate, Breite und Höhe von CGRect CGFloats sind und daher Teilwerte zulassen.

Zum Beispiel ist ein 100.8px by 50.1px Box zentriert bei (200.5, 35.5) ein gültiger Frame und das Betriebssystem wird versuchen, es so gut wie möglich zu machen. Der zusätzliche Interpolations- und Anti-Aliasing-Overhead, der nur für ein einziges Pixel erforderlich ist, reicht aus, um die Leistung älterer Hardware erheblich zu beeinträchtigen.

Verwandte Themen