Fuentes personalizadas en iOS 7

Estoy desarrollando un juego y me gustaría usar una fuente personalizada en mi aplicación. Estoy usando SpriteKit para eso, si eso es importante. Intenté utilizar este https://github.com/deni2s/IBCustomFonts pero no puedo hacerlo funcionar con esta fuente http://www.fontspace.com/freaky-fonts/emulogic

He intentado varias cosas, y he registrado la fuente en el info.plist de la aplicación … ¿Alguien sabe lo que está pasando?

Antes que nada, asumo que SpriteKit no hace ninguna diferencia.

  1. Necesita su fuente en .otf o .ttf copiada en su proyecto. Por ejemplo, en Archivos de soporte.
  2. Necesita editar el archivo .plist . Agregue la clave “Fuentes proporcionadas por la aplicación” en su plist y en el ítem 0 copie el nombre de archivo exacto de la fuente que copió en sus archivos Supporting WITH extension. Por ejemplo: “JosefinSansStd-Light_0.otf”
  3. Asegúrese de que la fuente que importó a su aplicación se esté empaquetando en la propia aplicación. Haga eso seleccionando su Target , luego Build Fases , luego Copy Bundle Resources . Si no ve su fuente allí, arrástrela desde Archivos auxiliares .

Finalmente, le gustaría enumerar todas sus fonts cuando la aplicación comience a ver el nombre utilizable para su fuente. Lo harás con este pequeño código:

NSArray *fontFamilies = [UIFont familyNames]; for (int i = 0; i < [fontFamilies count]; i++) { NSString *fontFamily = [fontFamilies objectAtIndex:i]; NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]]; NSLog (@"%@: %@", fontFamily, fontNames); } 

Busque su fuente en los resultados impresos, por ejemplo, buscaría "Josefin" y vería que el nombre real de la fuente es "JosefinSansStd-Light". Después de eso, solo necesitas usar esa fuente de la siguiente manera:

 UIFont *customFont = [UIFont fontWithName:@"JosefinSansStd-Light" size:20]; 

En iOS8 agrega sus fonts directamente al proyecto y están visibles en el constructor de interfaz. Modifique su código para tener esto en cuenta, pero configure programáticamente la fuente para iOS7 y selecciónela en el constructor de la interfaz xCode6. PD. El constructor de interfaz en xCode6 le proporciona el nombre de fuente correcto que puede copiar y pegar en el código siguiente.

 #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) if(SYSTEM_VERSION_LESS_THAN(@"8.0")) { UIFont *customFont = [UIFont fontWithName:@"OpenSans-Light" size:32]; self.registerLabel.font = customFont; } 

Espero que esto ayude, salud.

No hay problema para usar fonts personalizadas, lo hice. Sigue estos pasos:

  1. Registre la fuente en su info.plist agregando la entrada “Fuentes proporcionadas por la aplicación”. Pon el nombre del archivo de fuente, no el nombre de la fuente. Como font.ttf (creo que ya lo hiciste)
  2. Vaya a su proyecto en el navegador del proyecto, haga clic en el nombre del proyecto y vaya a “crear fases”, luego mire hacia abajo en “Copiar recursos del paquete”, vaya al final, hay muchos archivos y busque el signo “+”. Se abrirá una ventana emergente con sus archivos de proyecto. Busque su archivo de fuente y agréguelo al paquete.
  3. Por último, compruebe el nombre de la fuente. Cuando lo usa en su código, debe usar el nombre de la fuente, no el nombre del archivo. Para saber el nombre de la fuente, haga doble clic en el archivo de fuente en Finder y se abrirá una ventana que muestra la fuente. Compruebe el título de la ventana, ese es el nombre de la fuente que debe usar.

Y consejo, agregue ese nombre como una macro en su archivo ..Prefix.pch. Será más fácil usarlo en su proyecto si tiene que usar la fuente varias veces.

El problema que creo que tuvo es que registró correctamente la fuente, pero no se copió en el paquete de la aplicación. Entonces, cuando la aplicación se ejecutó, no pudo encontrar la fuente. Es por eso que el paso 2 es importante. Pasé mucho tiempo tratando de resolver eso la primera vez 🙂

Para lograr esto en forma rápida

Si desea enumerar todas sus fonts cuando la aplicación se inicia solo para ver el nombre utilizable para su fuente. Puedes hacer eso con este pequeño código:

  UIFont.familyNames.forEach { print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))") } 

Nunca he podido obtener estas respuestas para el trabajo que he intentado varias veces. La única forma en que alguna vez obtuve una fuente personalizada para seguir las instrucciones en la respuesta aceptada y luego crear una etiqueta oculta en el tablero de historia que usa la fuente. Puedo usar la fuente programáticamente. Extraño y hacky, lo sé, pero funcionó para mí.

Si estás en Xcode 6 es lo más fácil posible. Simplemente agregue una carpeta de font en su proyecto, agregue su fuente (s) en la carpeta y listo.

enter image description here

Si ninguno de los métodos anteriores le funcionó, Y si utiliza su fuente personalizada “programáticamente” (es decir, no la utilizó en ningún xib), deberá usarla al menos una vez en algún lugar de un xib, en cualquier lugar .

(PD Stuart Clark – Ya contesté esto, así que no me digan nada, por favor. Sin embargo, decidí reformularlo y publicarlo como una respuesta separada, porque me perdí su respuesta, no estaba claro para mí cuando lo leí. Encontré esta solución por casualidad cuando estaba probando la fuente personalizada en un xib, y vi que funcionó en otro lugar programáticamente, pero cuando eliminé la fuente del xib, dejó de funcionar programáticamente).

Actualizado para Swift 3.

 let fontFamilies:[String] = UIFont.familyNames for fontFamily: String in fontFamilies { let fontNames: [String] = UIFont.fontNames(forFamilyName: fontFamily) print("\(fontFamily) \(fontNames)"); } 

Tal vez una solución rápida: esto lo hizo por mí cuando la fuente ya funcionó, pero una nueva etiqueta, por ejemplo, no mostró la fuente deseada:

Limpiar, limpiar a fondo y vaciar la carpeta de datos derivados.

 please try below code. @end @implementation UILabel (CustomFont) -(void)setFontName:(NSString *)value{ CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320; [self setFont:[UIFont fontWithName:self.font.fontName size:newsize]]; } @end @implementation UITextField (CustomFont) -(void)setFontName:(NSString *)value{ CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320; [self setFont:[UIFont fontWithName:self.font.fontName size:newsize]]; } @end @implementation UIButton (CustomFont) -(void)setFontName:(NSString *)value{ CGFloat newsize = (self.titleLabel.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320; [self.titleLabel setFont:[UIFont fontWithName:self.titleLabel.font.fontName size:newsize]]; } @end @end @interface UILabel (CustomFont) -(void)setFontName:(NSString *)value; @end @interface UITextField (CustomFont) -(void)setFontName:(NSString *)value; @end @interface UIButton (CustomFont) -(void)setFontName:(NSString *)value; @end