Warum sieht das Zeichnen mit CoreText anders aus als UILabel?

8

Ich verwende TTTAttributedLabel (das CoreText verwendet) anstelle von UILabel, um bestimmte Teile fett darzustellen. Es funktioniert gut, aber der Text sieht nicht gleich aus. Es sieht so aus, als ob es eine andere Schriftart verwendet. Ich habe es auf die gleiche Schriftart (Helvetica) eingestellt, aber eins ist ein CTFont und eins ist ein UIFont. Warum sehen sie anders aus?

  • Hier ist die UIFont für die UILabel: [UIFont systemFontOfSize:15]
  • Hier ist die CTFont für CoreText: CTFontCreateWithName((__bridge CFStringRef)[UIFont systemFontOfSize:15].fontName, 15, NULL)

UILabel Screenshot:

CoreText Screenshot:

Das "p" und das "o" in "promenade" ist der einfachste Teil, um zu sehen, dass die Schrift nicht gleich aussieht. Buchstaben sind in der CoreText-Version runder.

    
jasongregori 16.11.2011, 20:39
quelle

3 Antworten

8

UILabel verwendet WebKit-Stil-Text-Rendering, bei dem die Genauigkeit der Verknüpfungen verkürzt wird, um die Zeichenleistung zu verbessern. CoreText (ursprünglich aus OS X) nimmt genau das Gegenteil und rendert genau und so perfekt wie möglich auf Kosten der Leistung.

Reservieren Sie für iOS-Apps CoreText nur für die sichtbarste Benutzeroberfläche (z. B. eine Überschrift), und Sie können die gerenderte Ausgabe möglicherweise zwischenspeichern.

    
jarjar 08.12.2011, 01:30
quelle
7

Ich habe auch eine Weile versucht, dieses Problem zu lösen, und ich glaube, ich habe es verstanden. Nach dem, was ich bisher getestet habe, sieht Ihr CoreText-Rendering identisch mit dem Rendering aus, das Sie in UILabel, UITextView usw. sehen, indem Sie Kerning auf Null setzen:

%Vor%

Das ist wirklich seltsames Verhalten, und ich kann nicht sagen, dass ich weiß, warum es passiert, aber das scheint Apple zu tun. (Es hat tatsächlich den Abstand an einigen Stellen erhöht, wie zwischen 'Te'.)

Getestet auf iOS 5.1.

    
Dan 20.03.2012 22:44
quelle
3

Ich bin mir ziemlich sicher, dass Core Text über erweiterte Renderfunktionen verfügt (Kerning- und Abstandsverbesserungen usw.). Es tut mir leid, dass ich keine Dokumente ausgraben kann, um das zu beweisen, aber es ist das allgemeine Gefühl, das ich davon bekomme.

Im Endeffekt können Sie nicht darauf zählen, dass Sie die gleichen Messwerte zwischen Core Text und UILabel und den anderen UIKit-APIs erhalten. Sie verwenden unterschiedliche Layout- und Abstandscodes.

    
Adam Ernst 05.12.2011 15:36
quelle

Tags und Links