使用CTFontCreateCopyWithSymbolicTraits更改字体样式

时间:2014-09-06 06:03:37

标签: ios objective-c core-text

我在名为_label的标签中有一个常规字体,而且我在试图使它大胆,然后只斜体(所以我想删除粗体)

为了使其更加粗体,我使用以下代码:

CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)_label.font.fontName, _label.font.pointSize, NULL);
CTFontRef boldFont = CTFontCreateCopyWithSymbolicTraits(font, 0.0, NULL, kCTFontBoldTrait, kCTFontBoldTrait);
CFStringRef boldName = CTFontCopyFullName(boldFont);
_label.font = [UIFont fontWithName:(__bridge NSString *)boldName size:_label.font.pointSize];

这很有效。但是,当我尝试使其仅使用斜体时,使用以下代码,字体最终以粗体和斜体显示:

font = CTFontCreateWithName((__bridge CFStringRef)_label.font.fontName, _label.font.pointSize, NULL);
boldFont = CTFontCreateCopyWithSymbolicTraits(font, 0.0, NULL, kCTFontBoldTrait | kCTFontItalicTrait, kCTFontItalicTrait); // I also tried 'kCTFontItalicTrait, kCTFontItalicTrait' for the last two parameters
boldName = CTFontCopyFullName(boldFont);
_label.font = [UIFont fontWithName:(__bridge NSString *)boldName size:_label.font.pointSize];

显然我没有正确使用CTFontCreateCopyWithSymbolicTraits。如何删除粗体?

1 个答案:

答案 0 :(得分:1)

您应该使用:

boldFont = CTFontCreateCopyWithSymbolicTraits(font, 0.0, NULL, kCTFontItalicTrait, kCTFontBoldTrait | kCTFontItalicTrait);

(尽管您可能想要更改变量名称)。

symTraitMask参数(最后一个)表示该调用会影响特征掩码的哪些位。你想影响"粗体"和"斜体"位。

symTraitValue参数(倒数第二个)表示受影响位的新值。您希望将这些位更改为具有"斜体"但没有"大胆"。