Hässlich aussehender Text beim Zeichnen von NSAttributedString in CGContext

8

Ich möchte Strings innerhalb von CoreAnimation-Layern anzeigen, aber CATextLayer ist leider nicht genug, vor allem, weil es schwierig ist, Constraints und zu verwenden, die den Text umbrechen sollen.

Ich verwende NSLayoutManager mit dem folgenden Code (PyObjC):

%Vor%

Das ist alles in Ordnung und funktioniert, aber das einzige Problem ist, dass es schlecht aussehenden Text produziert (obwohl es antialised ist).

Hier ist die CATextLayer-Version: Ссылка

Und hier ist die NSLayoutManager-Version: Ссылка

Alles, was ich vermisse?

    
orestis 03.04.2009, 21:17
quelle

1 Antwort

16

Ich beantworte das, weil die Cortex-Dev-Archive nicht durchsuchbar sind, und Aki Inoue von Apple hat gerade meine Frage beantwortet:

  

Da CALayer keine Subpixelfarbe darstellen kann (auch Fontglättung genannt), müssen Sie sie deaktivieren.   Ich glaube, dass CATextLayer es standardmäßig tut.

     

Machen Sie CGContextSetShouldSmoothFonts (context, false).

Danke, Aki!

Noch ein Kommentar von Milen Dzhumerov:

  

Ich glaube nicht, dass das genau ist. Wir zeichnen Text in CALayers mit Subpixel-Anti-Aliasing. Sie müssen nur sicherstellen, dass Sie hinter den Text gezeichnet haben, bevor Sie den Text selbst zeichnen. Siehe Ссылка für Referenzen.

Milen ist richtig, falls Sie die Hintergrundfarbe vorher kennen, können Sie:

%Vor%

Und Sie erhalten ziemlich Sub-Pixel Anti-Alias-Text. Wenn Sie jedoch die Hintergrundfarbe nicht kennen, brauchen Sie , um die Schriftglättung zu deaktivieren. Andernfalls werden die Ergebnisse verfälscht.

    
orestis 03.04.2009, 21:24
quelle

Tags und Links