Я хочу иметь некоторый текст с настраиваемым линейным интервалом, так что я написал строку атрибутов с CTParagraphStyleAttributte
и передать его на мой 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];
Но высота строки не меняется , Я думаю, что здесь что-то не хватает, но я не знаю, что.
Я пробовал с kCTParagraphStyleSpecifierLineSpacingAdjustment
и kCTParagraphStyleSpecifierLineSpacing
, но любой из них, похоже, не работает (?). Я также попытался установить выравнивание с помощью kCTParagraphStyleSpecifierAlignment
(я знаю, что CATextLayer
имеет свойство для этого), просто для проверки kCTParagraphStyleAttributeName
действительно работает, и это не так.
Я заметил, что даже если я передаю некоторые сумасшедшие значения (например: CTParagraphStyleCreate(styleSettings, -555);
), что заставляет меня спросить себя: CATextLayer
поддерживает атрибуты абзаца? Если да, то что мне здесь не хватает?
A) Счетчик arg 2 действительно должен быть напечатан как CFIndex. Но поскольку это просто длинный целочисленный тип, специально определенный для расширения, я сомневаюсь, что это действительно проблема. B) Я смог получить CATextLayer, чтобы получить табуляцию с помощью параметра paragraphStyle, поэтому он должен поддерживать некоторые из этих атрибутов, но другие, первый и третий отступы, не имели никакого эффекта, по крайней мере, не в iOS 4.3. (Надеюсь, у кого-то есть ответ, потому что ведущее кажется важным для функции textLayer.) – Wienke