ios - una - fuentes para iphone




¿Puedo incrustar una fuente personalizada en una aplicación de iPhone? (20)

Swift, código de forma: (funciona también con swift 2.0)

Agregue las fuentes requeridas a su proyecto (como agregar imágenes, solo arrastre a Xcode), asegúrese de que estén orientadas a su proyecto,
agregue este método y cargue fuentes personalizadas (recomendado en appDelegate didFinishLaunchingWithOptions)

func loadFont(filePath: String) {

    let fontData = NSData(contentsOfFile: filePath)!

    let dataProvider = CGDataProviderCreateWithCFData(fontData)
    let cgFont = CGFontCreateWithDataProvider(dataProvider)!

    var error: Unmanaged<CFError>?
    if !CTFontManagerRegisterGraphicsFont(cgFont, &error) {
        let errorDescription: CFStringRef = CFErrorCopyDescription(error!.takeUnretainedValue())
        print("Unable to load font: %@", errorDescription, terminator: "")
    }

}

Ejemplo de uso:

if let fontPath = NSBundle.mainBundle().pathForResource("My-Font", ofType: "ttf"){
      loadFont(fontPath)
}

Usa la fuente:

UIFont(name: "My-Font", size: 16.5)

Esta pregunta se refiere a iOS pre-3.2. A partir de 3.2, esta funcionalidad es fácilmente alcanzable utilizando la respuesta de samvermette a continuación, y he cambiado la Respuesta Aceptada (de comando a samvermette) para reflejar esto. No puedo dar crédito a ambas respuestas (además de upvotes) pero ambas son buenas.

Me gustaría que una aplicación incluyera una fuente personalizada para representar texto, cargarla y luego usarla con elementos UIKit estándar como UILabel . es posible?

Encontré abajo los enlaces:

pero esto requeriría que yo renderizase cada glifo, lo cual es un poco como un trabajo duro, especialmente para texto de varias líneas.

También encontré publicaciones que dicen directamente que no es posible, pero sin justificación, así que estoy buscando una respuesta definitiva.

EDITAR - fallado -[UIFont fontWithName:size:] experiment

Descargué Harrowprint.tff (descargado desde here ) y lo agregué a mi directorio de Recursos y al proyecto. Entonces probé este código:

UIFont* font = [UIFont fontWithName:@"Harrowprint" size:20];

que dio lugar a una excepción que se lanza. Mirar el archivo TTF en Finder confirmó que el nombre de la fuente era Harrowprint.

EDITAR : ha habido varias respuestas hasta el momento que me dicen que lea la documentación en X o Y. Experimenté ampliamente con todo esto y no llegué a ninguna parte. En un caso, X resultó ser relevante solo en OS X, no en iPhone. En consecuencia, estoy estableciendo una recompensa por esta pregunta, y otorgaré la recompensa a la primera persona que proporcione una respuesta (utilizando solo API documentadas) que responda con información suficiente para que esto funcione en el dispositivo. Trabajar en el simulador también sería una ventaja.

EDITAR - Parece que la recompensa se otorga automáticamente a la respuesta con el mayor número de votos. Interesante. En realidad, nadie proporcionó una respuesta que resolviera la pregunta tal como se la formuló: la solución que implica la codificación de su propia subclase UILabel no admite el UILabel palabras, que es una característica esencial para mí, aunque creo que podría ampliarla para hacerlo.


Aún no está disponible, pero la próxima versión de cocos2d (framework de juegos 2d) admitirá fuentes de mapa de bits de longitud variable como mapas de caracteres.

http://code.google.com/p/cocos2d-iphone/issues/detail?id=317

El autor no tiene una fecha de publicación fija para esta versión, pero sí vi una publicación que indicaba que sería en el próximo mes o dos.


Buscar ATSApplicationFontsPath

Una entrada simple que le permite incluir el (los) archivo (s) de fuente en su carpeta de recursos de la aplicación y "simplemente funcionan" en su aplicación.


Con iOS 8 + y Xcode 6 + puedes hacer esto fácilmente. Aquí están los pasos:

1) Arrastre y suelte su fuente en la carpeta de Archivos de Soporte de Xcode . No olvides marcar tu aplicación en la sección Agregar a objetivos . A partir de este momento, puede utilizar esta fuente en IB y elegirla de la paleta de fuentes.

2) Para que esta fuente esté disponible en su dispositivo, abra su info.plist y agregue las Fonts provided by application clave de la Fonts provided by application . Contendrá la clave del Artículo 0, debe agregar su nombre de fuente como valor. El nombre de la fuente puede variar de su nombre de archivo de fuente. Pero primero, intente agregar su nombre de archivo en la mayoría de los casos este trabajo.

Si no, este artículo siempre me ayudó.

Aquí hay un fragmento rápido del código de este artículo para ayudarlo a encontrar el nombre de la fuente.

func allFonts(){

   for family in UIFont.familyNames(){

       println(family)


       for name in UIFont.fontNamesForFamilyName(family.description)
       {
           println("  \(name)")
       }

   }

}

EDITAR

Quiero mencionar que necesita agregar archivos de fuentes a las fases de construcción de su destino , copiar los recursos del paquete . Sin él, no verás tu fuente en el dispositivo. Y podría llevar a un comportamiento inesperado.

Por ejemplo, me encuentro con un bug , cuando UITextField tiene una fuente personalizada, pero esta fuente no estaba en los recursos del paquete de copia . Y cuando paso al viewcontroller con este campo de textfield , hay un retraso de unos 4 segundos antes de que se viewDidLoad función viewDidLoad . La resolución de problemas de fuentes eliminó este retraso. Por lo tanto, recomiendo revisarlo dos veces. (rdar: // 20028250) Por cierto, no pude reproducir el error, pero estoy seguro de que el problema estaba en la fuente.


Encuentra el TTF en el buscador y "Obtener información". Bajo el encabezado "Nombre completo:" me dio un nombre que luego usé con fontWithName (simplemente copié y pegué el nombre exacto, en este caso no fue necesaria la extensión '.ttf').


Es muy fácil agregar una nueva fuente en su aplicación iOS existente.

Solo necesita agregar la fuente, por ejemplo, font.ttf en su Carpeta de recursos.

Abra su aplicación info.plist . Agregue una nueva fila como "Fuentes proporcionadas por la aplicación" y escriba el nombre de la fuente como font.ttf.

Y cuando configure la fuente, haga como setFont:"corresponding Font Name"

Puede verificar si su fuente está agregada o no por NSArray *check = [UIFont familyNames]; .

Devuelve toda la fuente que tu aplicación soporta.


Hay una nueva forma de usar fuentes personalizadas, comenzando con iOS 4.1. Le permite cargar fuentes dinámicamente, ya sea desde archivos incluidos con la aplicación, datos descargados o lo que tenga. También le permite cargar fuentes a medida que las necesita, mientras que el método anterior las carga todas al momento de iniciar la aplicación, lo que puede demorar mucho si tiene muchas fuentes.

El nuevo método se describe en ios-dynamic-font-loading

Utiliza la función CTFontManagerRegisterGraphicsFont , lo que le da un búfer con sus datos de fuente. Luego está disponible para UIFont y las vistas web, al igual que con el método anterior. Aquí está el código de ejemplo de ese enlace:

NSData *inData = /* your font-file data */;
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (! CTFontManagerRegisterGraphicsFont(font, &error)) {
    CFStringRef errorDescription = CFErrorCopyDescription(error)
    NSLog(@"Failed to load font: %@", errorDescription);
    CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);

He combinado algunos de los consejos de esta página en algo que me funciona en iOS 5.

Primero, debe agregar la fuente personalizada a su proyecto. Luego, debe seguir los consejos de @iPhoneDev y agregar la fuente a su archivo info.plist.

Después de hacer eso, esto funciona:

UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];

Sin embargo, necesita saber el nombre PostScript de su fuente. Solo sigue los consejos de @Daniel Wood y presiona command-i mientras estés en el FontBook.

Entonces, disfruta de tu fuente personalizada.


He hecho esto así:

Cargue la fuente:

- (void)loadFont{
  // Get the path to our custom font and create a data provider.
  NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"mycustomfont" ofType:@"ttf"]; 
  CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]);

  // Create the font with the data provider, then release the data provider.
  customFont = CGFontCreateWithDataProvider(fontDataProvider);
  CGDataProviderRelease(fontDataProvider); 
}

Ahora, en tu drawRect: haz algo como esto:

-(void)drawRect:(CGRect)rect{
    [super drawRect:rect];
    // Get the context.
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClearRect(context, rect);
    // Set the customFont to be the font used to draw.
    CGContextSetFont(context, customFont);

    // Set how the context draws the font, what color, how big.
    CGContextSetTextDrawingMode(context, kCGTextFillStroke);
    CGContextSetFillColorWithColor(context, self.fontColor.CGColor);
    UIColor * strokeColor = [UIColor blackColor];
    CGContextSetStrokeColorWithColor(context, strokeColor.CGColor);
    CGContextSetFontSize(context, 48.0f);

    // Create an array of Glyph's the size of text that will be drawn.
    CGGlyph textToPrint[[self.theText length]];

    // Loop through the entire length of the text.
    for (int i = 0; i < [self.theText length]; ++i) {
        // Store each letter in a Glyph and subtract the MagicNumber to get appropriate value.
        textToPrint[i] = [[self.theText uppercaseString] characterAtIndex:i] + 3 - 32;
    }
    CGAffineTransform textTransform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
    CGContextSetTextMatrix(context, textTransform);
    CGContextShowGlyphsAtPoint(context, 20, 50, textToPrint, [self.theText length]);
}

Básicamente, tienes que hacer algo de fuerza bruta recorriendo el texto e intercambiando información con el número mágico para encontrar tu desplazamiento (aquí, véeme usar 29) en la fuente, pero funciona.

Además, debe asegurarse de que la fuente se pueda incrustar legalmente. La mayoría no lo son y hay abogados que se especializan en este tipo de cosas, así que ten cuidado.


Para iOS 3.2 y superior: use los métodos proporcionados por varios de arriba, que son:

  1. Agregue su archivo de fuente (por ejemplo, Chalkduster.ttf ) a la carpeta de Recursos del proyecto en XCode.
  2. Abra info.plist y agregue una nueva clave llamada UIAppFonts. El tipo de esta clave debe ser array.
  3. Agregue su nombre de fuente personalizado a esta matriz, incluida la extensión (" Chalkduster.ttf ").
  4. Use [UIFont fontWithName:@"Real Font Name" size:16] en su aplicación.

PERO el "Nombre de fuente real" no siempre es el que se ve en el Libro de fuentes. La mejor manera es preguntar a su dispositivo qué fuentes ve y cuáles son los nombres exactos.

Uso el uifont-name-grabber publicado en: uifont-name-grabber

Simplemente coloque las fuentes que desee en el proyecto xcode, agregue el nombre del archivo a su lista y ejecútelo en el dispositivo para el que está creando, le enviará una lista completa de fuentes con los nombres que UIFont fontWithName: espera.


Recomendaría seguir uno de mis tutoriales cortos favoritos aquí: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ de donde proviene esta información.

Paso 1: arrastre su .ttf o .otf desde Finder a su proyecto

NOTA: asegúrese de hacer clic en la casilla "Agregar a objetivos" en el objetivo principal de su aplicación

Si olvidó hacer clic para agregarlo a su destino, haga clic en el archivo de fuente en la jerarquía de su proyecto y en el panel lateral derecho, haga clic en el objetivo principal de la aplicación en la sección Membresía objetivo

Para asegurarse de que sus fuentes sean parte del objetivo de su aplicación, asegúrese de que aparezcan en sus recursos de paquete de copias en las fases de compilación

Paso 2 - Agrega los nombres de los archivos de fuentes a tu Plist

Vaya a las Propiedades de destino de iOS personalizadas en su Sección de información y agregue una clave a los elementos de esa sección llamada Fonts provided by application (debería verla como una opción a medida que la escribe y se configurará como una matriz). Haga clic en la pequeña flecha para abrir los elementos de la matriz y escriba los nombres de los archivos .ttf o .otf que agregó para que su aplicación sepa que estos son los archivos de fuentes que desea que estén disponibles.

NOTA - Si su aplicación falla justo después de este paso, verifique su ortografía en los elementos que agrega aquí

Paso 3 - Averigua los nombres de tus fuentes para que puedas llamarlas

Muy a menudo, el nombre de la fuente que ve su aplicación es diferente del que cree que se basa en el nombre de archivo de esa fuente, ponga esto en su código y revise el registro que hace su aplicación para ver qué nombre de fuente llamar en su código

Rápido

for family: String in UIFont.familyNames(){
  print("\(family)")
  for names: String in UIFont.fontNamesForFamilyName(family){
      print("== \(names)")
  }
}

C objetivo

for (NSString* family in [UIFont familyNames]){
    NSLog(@"%@", family);
    for (NSString* name in [UIFont fontNamesForFamilyName: family]){
        NSLog(@"  %@", name);
    }
}

Su registro debe verse algo como esto:

Paso 4 - Usa tu nueva fuente personalizada usando el nombre del Paso 3

Rápido

 label.font = UIFont(name: "SourceSansPro-Regular", size: 18)

C objetivo

 label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];

Sí, puedes incluir fuentes personalizadas. Consulte la documentación en UIFont, específicamente, el fontWithName:size:

1) Asegúrate de incluir la fuente en tu carpeta de recursos.

2) El "nombre" de la fuente no es necesariamente el nombre del archivo.

3) Asegúrese de tener el derecho legal de usar esa fuente. Al incluirlo en su aplicación, también lo está distribuyendo, y necesita tener el derecho de hacerlo.


Tal vez el autor se olvidó de darle a la fuente un nombre de Mac FOND ?

  1. Abra la fuente en FontForge luego vaya a Elemento> Información de fuente
  2. Hay una opción "Mac" donde puede establecer el nombre FOND.
  3. En Archivo> Exportar fuente puede crear un nuevo ttf

También puede probar la opción "Apple" en el diálogo de exportación.

DESCARGO DE RESPONSABILIDAD : ¡No soy un desarrollador de iPhone!


Un aviso importante: debe usar el "nombre PostScript" asociado con la fuente, no su nombre completo o el apellido. Este nombre a menudo puede ser diferente del nombre normal de la fuente.


iOS 3.2 y posteriores soportan esto. Directamente de lo que hay de nuevo en iPhone OS 3.2 doc:

Soporte de fuente personalizado
Las aplicaciones que desean usar fuentes personalizadas ahora pueden incluir esas fuentes en su paquete de aplicaciones y registrarlas con el sistema al incluir la clave UIAppFonts en su archivo Info.plist. El valor de esta clave es una matriz de cadenas que identifica los archivos de fuente en el paquete de la aplicación. Cuando el sistema ve la clave, carga las fuentes especificadas y las pone a disposición de la aplicación.

Una vez que las fuentes se hayan configurado en la Info.plist , puede usar sus fuentes personalizadas como cualquier otra fuente en IB o programáticamente.

Hay un hilo en curso en los foros de desarrolladores de Apple:
https://devforums.apple.com/thread/37824 (es necesario iniciar sesión)

Y aquí hay un excelente y sencillo tutorial de 3 pasos sobre cómo lograr esto (se quitó el enlace roto)

  1. Agregue sus archivos de fuentes personalizados a su proyecto usando Xcode como recurso
  2. Agregue una clave a su archivo UIAppFonts llamado UIAppFonts .
  3. Haz de esta clave una matriz
  4. Para cada fuente que tenga, ingrese el nombre completo de su archivo de fuente (incluida la extensión) como elementos de la matriz UIAppFonts
  5. Guardar Info.plist
  6. Ahora en su aplicación, simplemente puede llamar a [UIFont fontWithName:@"CustomFontName" size:12] para obtener la fuente personalizada para usar con sus UILabels y UITextViews , etc.

También: asegúrese de que las fuentes estén en sus recursos de paquete de copia.


sigue este paso

1) Copia tu fuente en tu proyecto.

2) abra su archivo .plist en modo de código fuente ... (Nota: No abra info.plist )

3) Antes de eso, haga clic con el botón derecho en su fuente y ábrala en fontforge o editor similar, e install en su sistema.

4) Escribe esto

 <key>UIAppFonts</key>
<array>
    <string>MyriadPro.otf</string>
</array>

5) Escriba este código en su class .m

 [lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];

Aquí lblPoints cambiará a partir de su UILabel

¡¡Hecho!! Si su fuente aún no funciona, verifique primero la compatibilidad de sus fuentes


editar: Esta respuesta está inactiva a partir de iOS3.2; usar UIAppFonts

La única forma en que he podido cargar UIFont s con éxito es a través del marco de GraphicsServices privado.

Lo siguiente cargará todas las fuentes .ttf en el paquete principal de la aplicación:

BOOL GSFontAddFromFile(const char * path);
NSUInteger loadFonts()
{
    NSUInteger newFontCount = 0;
    for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
        newFontCount += GSFontAddFromFile([fontFile UTF8String]);
    return newFontCount;
}

Una vez que se cargan las fuentes, se pueden usar como las fuentes proporcionadas por Apple:

NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];

GraphicsServices puede incluso cargarse en tiempo de ejecución en caso de que la API desaparezca en el futuro:

#import <dlfcn.h>
NSUInteger loadFonts()
{
    NSUInteger newFontCount = 0;
    NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"];
    const char *frameworkPath = [[frameworkBundle executablePath] UTF8String];
    if (frameworkPath) {
        void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY);
        if (graphicsServices) {
            BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile");
            if (GSFontAddFromFile)
                for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
                    newFontCount += GSFontAddFromFile([fontFile UTF8String]);
        }
    }
    return newFontCount;
}

Aunque algunas de las respuestas anteriores son correctas, he escrito un tutorial visual detallado para personas que todavía tienen problemas con las fuentes.

Las soluciones anteriores que le indican que agregue la fuente a la lista y la use

[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];

son los correctos Por favor, ahora utiliza cualquier otra forma hackish. Si aún tiene problemas para encontrar nombres de fuentes y agregarlos, aquí está el tutorial:

Usando fuentes personalizadas en la aplicación ios


Sí, puedes usar fuentes personalizadas en tu aplicación.

paso a paso siguiendo allí:

Agregue sus archivos de fuentes personalizados a su proyecto en archivos de soporte

Agregue una clave a su archivo Info.plist llamado UIAppFonts.

Haz de esta clave una matriz

Para cada fuente que tenga, ingrese el nombre completo de su archivo de fuente (incluida la extensión) como elementos de la matriz UIAppFonts

Guardar Info.plist Ahora en su aplicación, simplemente puede llamar a [UIFont fontWithName: @ "su Nombre de fuente personalizado" tamaño: 20] para obtener la fuente personalizada para usar con sus UILabels después de aplicar esto si no está obteniendo la fuente correcta, luego haga doble clic en la fuente personalizada, y vea cuidadosamente el nombre de la fuente en la parte superior superior y copie esta fuente, pegue, aquí [UIFont fontWithName: @ "aquí pasado su nombre de fuente personalizado" tamaño: 20]

espero que obtengas la respuesta correcta


Sí, puedes usar fuentes personalizadas en tu aplicación.

paso a paso siguiendo allí:

  • Agregue sus archivos de fuentes personalizados a su proyecto en archivos de soporte
  • Agregue una clave a su Info.plistarchivo llamado UIAppFonts.
  • Haz de esta clave una matriz
  • Para cada fuente que tenga, ingrese el nombre completo de su archivo de fuente (incluida la extensión) como elementos de la matriz UIAppFonts
  • Guardar Info.plistahora en su aplicación, simplemente puede llamar [UIFont fontWithName:@"your Custom font Name" size:20]para obtener la fuente personalizada para usar con suUILabels

después de aplicar esto si no está obteniendo la fuente correcta, haga doble clic en la fuente personalizada y verá que el nombre de la fuente del lado superior se acerca y copia esta fuente, péguela, aquí [UIFont fontWithName:@" here past your Custom font Name" size:20]espero que obtenga la respuesta correcta





fonts