2010-03-12 7 views
9

Dies ist eine Anfängerfrage zum Umgang mit Schriften in Cocoa. Ich habe eine Schriftfamilie, z.B. Verdana, das die folgenden Schriften hat: Regular, Bold, Italic und Bold. Ich weiß, dass diese Schriftarten existieren, da sie im Bedienfeld "Schriftarten" verfügbar sind.Wie erstelle ich einen NSFont, der sowohl fett als auch kursiv ist?

Dies funktioniert:

NSFont *regular = [NSFont fontWithName:@"Verdana" size:75]; 
NSFont *bold = [NSFont fontWithName:@"Verdana-Bold" size:75]; 
NSFont *italic = [NSFont fontWithName:@"Verdana-Italic" size:75]; 

Dies funktioniert nicht:

NSFont *boldItalic = [NSFont fontWithName:@"Verdana-Bold Italic" size:75]; 

Was ist der einfachste Weg, um die Bold Version einer bestimmten Schriftfamilie zu bekommen?

Antwort

21

Dies funktioniert:

NSFontManager *fontManager = [NSFontManager sharedFontManager]; 
NSFont *boldItalic = [fontManager fontWithFamily:@"Verdana" 
              traits:NSBoldFontMask|NSItalicFontMask 
              weight:0 
              size:75]; 
+1

ich für t entschuldigen Der offensichtliche Plug, aber ich wollte erwähnen, dass ich das Framework [CocoaPuffs] (http://github.com/macpgrog-guy/CocoaPuffs) auf GitHub verfügbar gemacht habe und es eine nette Kategorie für die Arbeit mit NSFont und NSFontManager enthält. Es gibt auch einige Details [hier] (http: // macprog.com/simplifying-nsfont /). In diesem speziellen Fall, wenn Sie bereits einen Verweis auf die Schriftart Verdana hatten, mussten Sie lediglich verdana.fontVariationBoldItalic verwenden. – aLevelOfIndirection

+0

@aLevelOfIndirection: Die zwei Links, die Sie uns gegeben haben, sind kaputt. – Vince

+0

Entschuldigung. Ich habe seitdem den Rahmen heruntergenommen. Ich habe gerade einen [Gist] (https://gist.github.com/macprog-guy/156d33bfefef570a7efb) mit dem Code dafür hinzugefügt. Also mach weiter und lade es herunter. – aLevelOfIndirection

6

Verdana-BoldItalic.

(Der eigentliche Name der fett-kursiv Variante der Schrift hängt von der Familie, und einige Schriftarten nicht fett-kursiv haben, ein NSFontDescriptor mit -fontDescriptorWithSymbolicTraits: können Sie die genaue fett kursiv erhalten.)

8

See NSFontManager und -convertFont: toHaveTrait:

weitere Informationen, würde ich vorschlagen, die Font Handling Guide und speziell die Converting Fonts Manually Abschnitt mit dem Titel zu lesen.

Beachten Sie, dass die Schriftart, die Sie verwenden, eine Version mit den von Ihnen gewünschten Eigenschaften haben muss. Andernfalls erhalten Sie eine Schriftart zurück, jedoch ohne die gewünschte Eigenschaft.

Wenn schließlich, suchen Sie eine kursive Eigenschaft auf eine Schriftart hinzuzufügen, die nicht über eine einzigen Besuch:

How do I get Lucida Grande italic into my application?

1

Ich finde die folgenden UIFont-Kategorien sind äußerst nützlich:

@implementation UIFont (Styles) 
- (instancetype)bold 
{ 
    return [UIFont fontWithDescriptor:[self.fontDescriptor fontDescriptorWithSymbolicTraits:(self.fontDescriptor.symbolicTraits|UIFontDescriptorTraitBold)] size:self.pointSize]; 
} 

- (instancetype)italic 
{ 
    return [UIFont fontWithDescriptor:[self.fontDescriptor fontDescriptorWithSymbolicTraits:(self.fontDescriptor.symbolicTraits|UIFontDescriptorTraitItalic)] size:self.pointSize]; 
} 
@end 

Diese retu Rn eine fett/kursive Version von was auch immer Ihre vorhandene Schriftart ist, mit UIFontDescriptorSymbolicTraits. Dies ist eine großartige Art und Weise zu ändern, zum Beispiel ein Text oder detailText Zelle fett oder kursiv oder beide, einfach, indem Sie zu sein:

cell.textLabel.font = cell.textLabel.font.bold; 
cell.detailTextLabel.font = cell.detailTextLabel.font.italic; 

Hinweis: Der neue Stil ist ODER-verknüpft mit bestehenden Züge, so dass Sie die Stile beide durch bekommen Verbindung kann:

cell.textLabel.font = cell.textLabel.font.bold.italic; 
+0

OP fragt nach NSFont –

Verwandte Themen