NSFont - 如何获得正确的字体?

时间:2012-01-24 20:26:25

标签: objective-c nsfont

我想让NSFont描述Arial,正常,高度为30pt。到目前为止,我有:

    NSNumber *weight = [NSNumber numberWithFloat:1.0];
    NSNumber *slant = [NSNumber numberWithFloat:1.0];
    NSDictionary *fontTraits = [NSDictionary dictionaryWithObjectsAndKeys: weight, NSFontWeightTrait, slant, NSFontSlantTrait, nil];
    NSDictionary *fontAttributes = [NSDictionary dictionaryWithObjectsAndKeys: @"Arial", NSFontFaceAttribute, 
                                                                               fontTraits, NSFontTraitsAttribute, nil];
    NSFontDescriptor *fontDescriptor = [NSFontDescriptor fontDescriptorWithFontAttributes: fontAttributes];
    NSFont *largeFont = [NSFont fontWithDescriptor: fontDescriptor size: 30];

但是由此产生的NSFont尺寸不合适。我可以放任何我想要的尺寸,它们看起来都一样。

1 个答案:

答案 0 :(得分:8)

你在为iOS或Mac OS X写作吗?

这在我的Mac App中运行良好:

NSFont* font = [NSFont fontWithName:@"Arial" size:30];
粗体和/或斜体的

更新:对您来说足够了吗?

NSFont* font = [NSFont fontWithName:@"Arial Italic" size:30];
NSFont* font = [NSFont fontWithName:@"Arial Bold" size:30];
NSFont* font = [NSFont fontWithName:@"Arial Bold Italic" size:30];

更新2 可能会看一下NSFontManager

// convert font
NSFont* font = [NSFont fontWithName:@"Arial" size:30];
font = [[NSFontManager sharedFontManager] convertFont:font toHaveTrait:NSFontItalicTrait];

// create with traits and weight
NSFont* font = [[NSFontManager sharedFontManager]  fontWithFamily:@"Arial" traits:NSFontItalicTrait weight:2 size:30];

但是没有这些,你可以创建一个权重为5且倾斜度为4的字体。

我最近和一位设计师谈过字体,他告诉我通常像Arial这样的字体实际上是4个字体(即Arial,Arial Italic,Arial Bold和Arial Bold Italic)。其他3种其他字体样式(具有特征)不是由算法动态生成的。