ios - tela - qual o nome da fonte do iphone




Posso incorporar uma fonte personalizada em um aplicativo do iPhone? (20)

Swift, maneira de código: (funciona também com o swift 2.0)

Adicione as fontes necessárias ao seu projeto (assim como adicionar imagens, basta arrastar para o Xcode), verifique se elas estão direcionadas para o seu projeto,
adicione este método e carregue fontes personalizadas (recomendado em 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: "")
    }

}

Use o exemplo:

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

Use a fonte:

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

Esta questão refere-se ao iOS pré-3.2. A partir do 3.2, essa funcionalidade é facilmente alcançável usando a resposta do samvermette abaixo, e eu mudei a Resposta Aceita (do comando para samvermette) para refletir isso. Eu não posso dar crédito a ambas as respostas (além de votos positivos), mas ambas são boas.

Eu gostaria de ter um aplicativo incluir uma fonte personalizada para renderizar texto, carregá-lo e usá-lo com elementos UIKit padrão, como o UILabel . Isso é possível?

Eu encontrei links abaixo:

mas isso exigiria que eu gerasse cada glifo, o que é um pouco trabalhoso demais, especialmente para textos com várias linhas.

Eu também encontrei posts que dizem que não é possível, mas sem justificativa, então eu estou procurando uma resposta definitiva.

Falha de EDIT - failed -[UIFont fontWithName:size:]

Eu baixei o Harrowprint.tff (baixei here ) e o adicionei ao meu diretório Resources e ao projeto. Eu então tentei este código:

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

que resultou em uma exceção sendo lançada. Observar o arquivo TTF no Finder confirmou que o nome da fonte era Harrowprint.

EDIT - tem havido um número de respostas até agora que me dizem para ler a documentação em X ou Y. Eu experimentei extensivamente com todos estes e não tenho nenhum lugar. Em um caso, o X acabou sendo relevante apenas no OS X, não no iPhone. Consequentemente, estou definindo uma recompensa por essa questão, e concederei a recompensa à primeira pessoa que fornecer uma resposta (usando apenas APIs documentadas) que responda com informações suficientes para que isso funcione no dispositivo. Trabalhar no simulador também seria um bônus.

EDIT - Parece que a recompensa auto-prêmios para a resposta com o maior número de votos. Interessante. Ninguém realmente forneceu uma resposta que resolvesse a questão conforme solicitado - a solução que envolve codificar sua própria subclasse UILabel não suporta quebra automática de palavras, que é um recurso essencial para mim - embora eu possa estendê-la para isso.


É muito fácil adicionar uma nova fonte ao seu aplicativo iOS existente.

Você só precisa adicionar a fonte, por exemplo, font.ttf na sua pasta de recursos.

Abra seu aplicativo info.plist . Adicione uma nova linha como "Fontes fornecidas pelo aplicativo" e digite o nome da fonte como font.ttf.

E quando definir a fonte, faça como setFont:"corresponding Font Name"

Você pode verificar se sua fonte é adicionada ou não por NSArray *check = [UIFont familyNames]; .

Ele retorna toda a fonte que seu aplicativo suporta.


Aqui está o passo a passo de como fazer isso. Não precisa de biblioteca extra ou qualquer codificação especial.

shang-liang.com/blog/custom-fonts-in-ios4

Na maioria das vezes, o problema está na fonte e não no método. A melhor maneira de fazer isso é usar uma fonte que certamente funcionará, como verdana ou geogia. Em seguida, mude para a fonte pretendida. Se não funcionar, talvez o nome da fonte não esteja correto ou a fonte não seja bem formatada.


Com o iOS 8 + e o Xcode 6 +, você pode fazer isso facilmente. Aqui estão os passos:

1) Arraste e solte sua fonte na pasta Xcode Supporting Files. Não se esqueça de marcar seu aplicativo na seção Adicionar aos destinos . A partir deste momento, você pode usar essa fonte no IB e escolhê-la da paleta de fonte.

2) Para disponibilizar essa fonte no seu dispositivo, abra seu info.plist e adicione Fonts provided by application chave do Fonts provided by application . Ele conterá a chave Item 0, você deve adicionar o nome da fonte como o valor. Nome da fonte pode variar de seu nome de arquivo de fonte. Mas primeiro, tente adicionar seu nome de arquivo na maioria dos casos deste trabalho.

Se não, este artigo sempre me ajudou.

Aqui está um pequeno trecho do código deste artigo para ajudá-lo a encontrar o nome da sua fonte.

func allFonts(){

   for family in UIFont.familyNames(){

       println(family)


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

   }

}

EDITAR

Gostaria de mencionar que você precisa adicionar arquivos de fontes às Fases de Construção do seu Target , Copiar Recursos do Bundle . Sem ele, você não verá sua fonte no dispositivo. E isso pode levar a um comportamento inesperado.

Por exemplo, encontro um bug , quando o UITextField tem uma fonte personalizada, mas essa fonte não estava nos Recursos do Bundle de Cópia . E quando eu segue para o viewcontroller com este campo de viewcontroller , há um atraso de cerca de 4 segundos antes da função viewDidLoad ser chamada. Resolver problemas de fonte removeu esse atraso. Então, recomendamos verificar duas vezes. (rdar: // 20028250) Btw, não consegui reproduzir o bug, mas tenho certeza de que o problema estava na fonte.


Encontre o TTF no localizador e "Get Info". Sob o título "Nome completo:" ele me deu um nome que eu usei com fontWithName (eu apenas copiei e colei o nome exato, neste caso nenhuma extensão '.ttf' era necessária).


Eu fiz isso assim:

Carregue a fonte:

- (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); 
}

Agora, no seu drawRect: faça algo assim:

-(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]);
}

Basicamente, você tem que fazer um loop de força bruta através do texto e futzing com o número mágico para encontrar o seu deslocamento (aqui, veja-me usando 29) na fonte, mas funciona.

Além disso, você precisa garantir que a fonte seja legalmente incorporada. A maioria não é e há advogados especializados nesse tipo de coisa, então esteja avisado.


Eu tenho tentado as várias sugestões nesta página no iOS 3.1.2 e estas são as minhas conclusões:

Simplesmente usar [UIFont fontWithName:size:] com as fontes no diretório Resources não funcionará, mesmo se o nome FOND for definido usando FontForge.

[UIFont fontWithName:size:] funcionará se as fontes forem carregadas primeiro usando GSFontAddFromFile. Mas o GSFontAddFromFile não faz parte do iOS 3.1.2, então ele deve ser carregado dinamicamente conforme descrito por @rpetrich.


Existe uma maneira simples de usar fontes personalizadas no iOS 4 .

  1. Adicione seu arquivo de fonte (por exemplo, Chalkduster.ttf ) à pasta Resources do projeto no XCode.
  2. Abra info.plist e adicione uma nova chave chamada UIAppFonts . O tipo dessa chave deve ser array.
  3. Adicione seu nome de fonte personalizado a este array, incluindo a extensão ( Chalkduster.ttf ).
  4. Agora você pode usar [UIFont fontWithName:@"Chalkduster" size:16] em seu aplicativo.

Infelizmente, o IB não permite inicializar rótulos com fontes personalizadas. Veja esta questão para resolver este problema. Minha solução favorita é usar a subclasse UILabel personalizada:

@implementation CustomFontLabel

- (id)initWithCoder:(NSCoder *)decoder
{
    if (self = [super initWithCoder: decoder])
    {
        [self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
    }
    return self;
}

@end

No Info.plist, adicione a entrada "Fontes fornecidas pelo aplicativo" e inclua os nomes das fontes como strings:

Fonts provided by application
           Item 0        myfontname.ttf
           Item 1        myfontname-bold.ttf
           ...

Em seguida, verifique se sua fonte está incluída executando:

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

Observe que o nome do arquivo ttf pode não ser o mesmo nome que você usa ao definir a fonte da etiqueta (você pode usar o código acima para obter o parâmetro "fontWithName"):

[label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];

O iOS 3.2 e posterior suportam isso. Diretamente do que há de novo no iPhone OS 3.2 doc:

Suporte Personalizado a Fontes
Os aplicativos que desejam usar fontes personalizadas agora podem incluir essas fontes em seu pacote de aplicativos e registrar essas fontes no sistema, incluindo a chave UIAppFonts em seu arquivo Info.plist. O valor dessa chave é uma matriz de seqüências que identifica os arquivos de fonte no pacote configurável do aplicativo. Quando o sistema vê a chave, ele carrega as fontes especificadas e as disponibiliza para o aplicativo.

Uma vez que as fontes foram definidas no Info.plist , você pode usar suas fontes personalizadas como qualquer outra fonte no IB ou programaticamente.

Há um tópico em andamento nos Fóruns de desenvolvedores da Apple:
https://devforums.apple.com/thread/37824 (login obrigatório)

E aqui está um tutorial excelente e simples de 3 etapas sobre como conseguir isso (link quebrado removido)

  1. Adicione seus arquivos de fontes personalizados ao seu projeto usando o Xcode como um recurso
  2. Adicione uma chave ao seu arquivo UIAppFonts chamado UIAppFonts .
  3. Faça desta chave uma matriz
  4. Para cada fonte que você tem, digite o nome completo do seu arquivo de fonte (incluindo a extensão) como itens para o array UIAppFonts
  5. Salvar Info.plist
  6. Agora, em seu aplicativo, você pode simplesmente chamar [UIFont fontWithName:@"CustomFontName" size:12] para obter a fonte personalizada para usar com seus UILabels e UITextViews , etc ...

Além disso: verifique se as fontes estão nos recursos do pacote de cópias.


Primeiro adicione a fonte em formato .odt aos seus recursos, neste caso usaremos DINEngschriftStd.otf, então use este código para atribuir a fonte ao rótulo.

[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];

Para garantir que sua fonte seja carregada no projeto, apenas chame

NSLog(@"Available Font Families: %@", [UIFont familyNames]);

No .plist você deve declarar a fonte. Basta adicionar um registro 'Fontes fornecidas pelo aplicativo' e adicionar uma string de item 0 com o nome da fonte (DINEngschriftStd.otf)


Procurar ATSApplicationFontsPath

Uma simples entrada plist que permite incluir o (s) arquivo (s) de fonte na pasta de recursos do aplicativo e eles "simplesmente funcionam" no seu aplicativo.


Sim, você pode incluir fontes personalizadas. Consulte a documentação no UIFont, especificamente, o fontWithName:size:

1) Certifique-se de incluir a fonte na sua pasta de recursos.

2) O "nome" da fonte não é necessariamente o nome do arquivo.

3) Verifique se você tem o direito legal de usar essa fonte. Ao incluí-lo no seu aplicativo, você também o está distribuindo e precisa ter o direito de fazer isso.


Talvez o autor tenha esquecido de dar à fonte um nome Mac FOND ?

  1. Abra a fonte no FontForge e vá para Element> Font Info
  2. Existe uma opção "Mac" onde você pode definir o nome FOND.
  3. Em Arquivo> Exportar Fonte, você pode criar um novo ttf

Você também pode experimentar a opção "Apple" na caixa de diálogo de exportação.

ISENÇÃO DE RESPONSABILIDADE : Eu não sou um desenvolvedor de iPhone!


siga este passo

1) Copie sua fonte em seu projeto

2) abra seu arquivo .plist no modo de código fonte ... (Nota- Não abra info.plist )

3) Antes disso - Clique com o botão direito do mouse na sua fonte e abra-a no fontforge ou editor similar e install -a no seu sistema, ela deve ser install

4) Digite este

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

5) Digite este código em sua class .m

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

Aqui os lblPoints serão alterados a partir do seu UILabel

Feito!! Se ainda assim a sua fonte não funcionar, verifique primeiro a compatibilidade das fontes


Edit: A partir do iOS 3.2, esta funcionalidade está embutida. Se você precisar de suporte pré-3.2, você ainda pode usar esta solução.

Eu criei um módulo simples que estende UILabel e lida com arquivos .ttf. Eu lancei o opensource sob a licença Apache e coloquei no github Here.

Os arquivos importantes são FontLabel.h FontLabel.m .

Ele usa alguns códigos da resposta da Genericrich .

Procure a fonte Here.

OU

  • Copie seu arquivo de fontes em recursos

  • Adicione uma chave ao seu arquivo Info.plist chamado UIAppFonts. ("Fontes fornecidas pelo aplicativo)

  • Faça desta chave uma matriz

  • Para cada fonte que você tem, digite o nome completo do seu arquivo de fonte (incluindo a extensão) como itens para o array UIAppFonts

  • Salvar Info.plist

  • Agora, em seu aplicativo, você pode simplesmente chamar [UIFont fontWithName:@"CustomFontName" size:15] para obter a fonte personalizada para usar com seus UILabels e UITextViews , etc ...

Para maiores informações


Embora algumas das respostas acima estejam corretas, escrevi um tutorial visual detalhado para pessoas que ainda têm problemas com fontes.

As soluções acima que lhe dizem para adicionar a fonte à plist e usar

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

são os corretos. Por favor, use agora qualquer outra maneira hackish. Se você ainda está enfrentando problemas para encontrar nomes de fontes e adicioná-los, aqui está o tutorial -

Usando fontes personalizadas no aplicativo ios


Eu fiz todo o possível, mas as novas fontes não aparecem, então encontrei a solução:

Quando você arrasta os arquivos fot (otf ou ttf) não se esqueça de marcar a caixa de seleção em "Adicionar aos destinos".

Depois disso, sua fonte aparecerá e tudo funcionará bem.


sim você pode usar fonte personalizada em sua aplicação

passo a passo seguindo lá:

  • Adicione seus arquivos de fontes personalizados ao seu projeto em arquivos de suporte
  • Adicione uma chave ao seu Info.plistarquivo chamado UIAppFonts.
  • Faça desta chave uma matriz
  • Para cada fonte que você tem, digite o nome completo do seu arquivo de fonte (incluindo a extensão) como itens para o array UIAppFonts
  • Salvar Info.plistagora em seu aplicativo, você pode simplesmente ligar [UIFont fontWithName:@"your Custom font Name" size:20]para obter a fonte personalizada para usar com o seuUILabels

depois de aplicar isso, se você não está recebendo fonte correta, então você dê um duplo clique na fonte personalizada, e veja cuidadosamente o nome da fonte do lado superior está chegando e copie esta fonte, cole, aqui [UIFont fontWithName:@" here past your Custom font Name" size:20]eu espero que você obtenha resposta correta


Há uma nova maneira de usar fontes personalizadas, começando com o iOS 4.1. Ele permite que você carregue fontes dinamicamente, sejam elas de arquivos incluídos no aplicativo, dados baixados ou o que você tem. Ele também permite que você carregue as fontes conforme necessário, enquanto o método antigo carrega todas elas no momento da inicialização do aplicativo, o que pode levar muito tempo se você tiver muitas fontes.

O novo método é descrito em ios-dynamic-font-loading

Você usa a CTFontManagerRegisterGraphicsFontfunção, dando a ela um buffer com os dados da fonte. Em seguida, ele está disponível para UIFontvisualizações na Web, assim como no método antigo. Aqui está o código de amostra desse link:

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);






fonts