2010-03-12 9 views
9

Esta es una pregunta para principiantes sobre el manejo de fuentes en Cocoa. Tengo una familia de fuentes, p. Verdana, que tiene los siguientes tipos de letra: Regular, Negrita , cursiva y negrita cursiva . Sé que existen tipos de letra, ya que están disponibles en el panel Fuentes.¿Cómo creo un NSFont que sea negrita y cursiva?

Esto funciona:

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

Esto no funciona:

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

¿Cuál es la forma más sencilla de obtener la versión negrita cursiva de una familia de fuentes determinado?

Respuesta

21

Esto funciona:

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

me disculpo por t El conector obvio, pero quería mencionar que he hecho que el marco [CocoaPuffs] (http://github.com/macpgrog-guy/CocoaPuffs) esté disponible en GitHub y contiene una buena categoría para trabajar con NSFont y NSFontManager. También hay algunos detalles [aquí] (http: // macprog.com/simplifying-nsfont /). En este caso específico, si ya tenía una referencia a la fuente Verdana, todo lo que habría necesitado hacer es verdana.fontVariationBoldItalic. – aLevelOfIndirection

+0

@aLevelOfIndirection: los dos enlaces que nos diste están rotos. – Vince

+0

Disculpas. Desde entonces he descendido del marco. He agregado un [Gist] (https://gist.github.com/macprog-guy/156d33bfefef570a7efb) justo ahora con el código para ello. Así que adelante y descárgalo. – aLevelOfIndirection

6

Verdana-BoldItalic.

(El nombre real de la variante negrita-cursiva de la fuente depende de la familia, y algunos fuente no tiene negrita y cursiva, Use un NSFontDescriptor con -fontDescriptorWithSymbolicTraits: para obtener el tipo de letra cursiva negrita exacta.)

8

Ver NSFontManager y -convertFont: toHaveTrait:

Para obtener información más detallada, sugeriría leer el Font Handling Guide y en concreto la sección titulada Converting Fonts Manually.

Tenga en cuenta que la fuente que está utilizando necesita tener alguna versión de la misma con los rasgos que está solicitando, de lo contrario, obtendrá una fuente, pero sin el rasgo solicitado.

Si, con el tiempo, se están buscando para agregar un rasgo cursiva a una fuente que no tiene uno, echa un vistazo a:

How do I get Lucida Grande italic into my application?

1

Encuentro las siguientes categorías UIFont extremadamente útiles:

@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 

Estos retu En una versión en negrita/cursiva de cualquiera que sea su fuente existente, usando UIFontDescriptorSymbolicTraits. Esta es una gran manera de cambiar, por ejemplo, el texto de una celda o detailText sean negrita o cursiva, o tanto, simplemente por hacer:

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

Nota: el nuevo estilo es usando OR con cualquier rasgo existentes, por lo que puede agravar los estilos para conseguir tanto por:

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

OP pregunta por NSFont –

Cuestiones relacionadas