Ich möchte einen Text mit einem benutzerdefinierten Zeilenabstand haben, also schrieb ich meine ein Attribut Zeichenfolge mit CTParagraphStyleAttributte
und übergeben es an CATextLayer
:CATextLayer + NSAttributtedString + CTParagraphStyleRef
UIFont *font = [UIFont systemFontOfSize:20];
CTFontRef ctFont = CTFontCreateWithName((CFStringRef)font.fontName,
font.pointSize, NULL);
CGColorRef cgColor = [UIColor whiteColor].CGColor;
CGFloat leading = 25.0;
CTTextAlignment alignment = kCTRightTextAlignment; // just for test purposes
const CTParagraphStyleSetting styleSettings[] = {
{kCTParagraphStyleSpecifierLineSpacingAdjustment, sizeof(CGFloat), &leading},
{kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &alignment}
};
CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(styleSettings, 2));
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
(id)ctFont, (id)kCTFontAttributeName,
(id)cgColor, (id)kCTForegroundColorAttributeName,
(id)paragraphStyle, (id)kCTParagraphStyleAttributeName,
nil];
CFRelease(ctFont);
CFRelease(paragraphStyle);
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc]
initWithString:string
attributes:attributes];
_textLayer.string = attrStr;
[attrStr release];
Aber die Zeilenhöhe ändert sich nicht . Ich denke, ich vermisse etwas hier, aber ich weiß nicht was.
Ich habe versucht mit kCTParagraphStyleSpecifierLineSpacingAdjustment
und kCTParagraphStyleSpecifierLineSpacing
aber beide scheinen nicht zu funktionieren (?). Ich habe auch versucht, die Ausrichtung mit kCTParagraphStyleSpecifierAlignment
(ich weiß, CATextLayer
hat eine Eigenschaft dafür), nur um zu testen kCTParagraphStyleAttributeName
ist in der Tat funktioniert und es nicht getan.
Ich habe festgestellt, dass selbst wenn ich einige verrückte Werte (zum Beispiel: CTParagraphStyleCreate(styleSettings, -555);
) übergeben, was mich dazu bringt, mich selbst zu fragen: Unterstützt CATextLayer
Absatzattribute? Wenn ja, was fehlt mir hier?
A) Der Zähler arg 2 sollte eigentlich als CFIndex eingegeben werden. Aber da das nur Long Integer Typ speziell für die Expansion definiert ist, bezweifle ich, dass es wirklich das Problem ist. B) Ich habe CATextLayer dazu gebracht, einen Tabstopp über einen paragraphStyle aufzunehmen, also müssen einige dieser Attribute unterstützt werden - aber andere, erste Zeile und Kopfeinzug, hatten keinen Effekt, zumindest nicht in iOS 4.3. (Ich hoffe, jemand hat die Antwort, weil die Führung der TextLayer-Funktion wichtig scheint.) – Wienke