Posso incorporare un carattere personalizzato in un'applicazione iPhone?


772

Vorrei che un'app includesse un font personalizzato per il rendering del testo, caricarlo e quindi usarlo con UIKitelementi standard come UILabel. È possibile?


5
In una delle lezioni di CS193p (iPhone Application Development) a Stanford, Evan ha notato che installare il proprio font su un dispositivo è "un sacco di lavoro", il che almeno significa che è possibile :-)
Ilya Birman

2
iPhone 3.2 consente il carattere personalizzato, ma è solo iPad (vedi risposta sotto)
samvermette

6
Ho usato le immagini alla fine.
Airsource Ltd,

2
wow ... dopo tutto ciò, la risposta è ancora immagini ... incredibile. Speravo davvero una solida implementazione di caratteri personalizzati con le stesse capacità dei caratteri di sistema. ahimè ...
d2burke,

1
Ho sostanzialmente ridotto la domanda originale per riflettere il decennio trascorso da quando l'ho fatta. Incoraggerei tutti gli altri a tagliare i propri commenti e risposte in modo appropriato.
Airsource Ltd,

Risposte:


646

iOS 3.2 e versioni successive supportano questo. Direttamente dal documento Novità di iPhone OS 3.2 :

Supporto per font personalizzati Le
applicazioni che desiderano utilizzare font personalizzati ora possono includere quei font nel loro pacchetto di applicazioni e registrarli con il sistema includendo la chiave UIAppFonts nel loro file Info.plist. Il valore di questa chiave è un array di stringhe che identificano i file dei caratteri nel bundle dell'applicazione. Quando il sistema vede la chiave, carica i caratteri specificati e li rende disponibili per l'applicazione.

Una volta impostati i caratteri in Info.plist, è possibile utilizzare i caratteri personalizzati come qualsiasi altro carattere in IB o programmaticamente.

C'è un thread in corso sui forum degli sviluppatori Apple:
https://devforums.apple.com/thread/37824 (è necessario il login)

Ed ecco un eccellente e semplice tutorial in 3 passaggi su come raggiungere questo obiettivo (collegamento interrotto rimosso)

  1. Aggiungi i tuoi file di font personalizzati nel tuo progetto usando Xcode come risorsa
  2. Aggiungi una chiave al tuo Info.plistfile chiamato UIAppFonts.
  3. Trasforma questa chiave in un array
  4. Per ogni carattere che hai, inserisci il nome completo del tuo file di carattere (inclusa l'estensione) come elementi UIAppFontsdell'array
  5. Salva Info.plist
  6. Ora nella tua applicazione puoi semplicemente chiamare [UIFont fontWithName:@"CustomFontName" size:12]per ottenere il carattere personalizzato da utilizzare con UILabels e UITextViews , ecc ...

Inoltre: assicurati che i caratteri siano presenti nelle risorse del pacchetto copia.


14
Ecco un tutorial passo passo per iOS4: blog.beefyapps.com/2010/06/custom-fonts-in-ios-4
pm_labs

15
Questo tutorial è molto buono. shang-liang.com/blog/custom-fonts-in-ios4 È importante sottolineare che l'argomento NSString su [UIFont fontWithName: ...] è il nome del sistema operativo per il carattere anziché il nome del file.
Willster,

152
Prima che qualcun altro impieghi 3 ore a installare fontforge per trovare l'effettivo nome Postscript del font richiesto da iOS. Ti faccio notare che puoi semplicemente premere Cmd + I sul carattere nel libro dei caratteri per trovare queste informazioni.
Daniel Wood,

42
Dopo aver lottato per ottenere il nome del carattere giusto, ho appena elencato i caratteri installati e l'ho trovato. Molto utile. Ecco il codice: for (NSString * familyName in [UIFont familyNames]) {NSLog (@ "Family% @", familyName); NSLog (@ "Names =% @", [UIFont fontNamesForFamilyName: familyName]); }
Steve Potter,

26
Se il tuo codice non funziona, assicurati di aver trovato il file del carattere visualizzato in "Build Phases" -> "Copy Bundle Resouces"
Mickey

299

Modifica: a partire da iOS 3.2, questa funzionalità è integrata. Se devi supportare pre-3.2, puoi comunque utilizzare questa soluzione.

Ho creato un modulo semplice che estende UILabele gestisce il caricamento di file .ttf. L'ho rilasciato opensource con la licenza Apache e l'ho messo su github Here.

I file importanti sono FontLabel.he FontLabel.m.

Utilizza parte del codice dalla risposta di Genericrich .

Sfoglia la fonte qui.

O

  • Copia il file del font in risorse

  • Aggiungi una chiave al tuo Info.plistfile chiamato UIAppFonts. ("Caratteri forniti dall'applicazione)

  • Trasforma questa chiave in un array

  • Per ogni carattere che hai, inserisci il nome completo del tuo file di caratteri (inclusa l'estensione) come elementi nell'array UIAppFonts

  • Salva Info.plist

  • Ora nella tua applicazione puoi semplicemente chiamare [UIFont fontWithName:@"CustomFontName" size:15]per ottenere il carattere personalizzato da usare con il tuo UILabelse UITextViews, ecc ...

Per maggiori informazioni


2
Ho provato a usare il tuo codice ma si blocca abbastanza spesso a seconda del carattere. Ad esempio, prova a utilizzare i caratteri africani o Tiki da qui fontspace.com/category/tiki .
4thSpace

2
Questa libreria funziona alla grande. Ho bisogno di aiuto con la spaziatura verticale però. Non riesco a capire come farlo. Quindi ho questo message.numberOfLines = 3; Come posso controllare la spaziatura verticale tra la linea 1 e la linea 2 e la linea 3? Grazie, tee
teepusink,

2
@commanda Ciao commanda, il link che hai fornito nella tua risposta sembra non essere disponibile.
Parth Bhatt,

5
@ParthBhatt Si consiglia di utilizzare la soluzione fornita in stackoverflow.com/a/2616101/21447 invece di FontLabel, dal momento che questa funzionalità è ora fornita da Cocoa Touch.
commanda

2
@ParthBhatt: Non so perché il repository non sia più ospitato su zynga, ma è disponibile su github.com/kballard/fontlabel
Lily Ballard,

116

Esiste un modo semplice per utilizzare caratteri personalizzati in iOS 4 .

  1. Aggiungi il tuo file di font (ad esempio, Chalkduster.ttf) nella cartella Risorse del progetto in XCode.
  2. Apri info.pliste aggiungi una nuova chiave chiamata UIAppFonts. Il tipo di questa chiave dovrebbe essere array.
  3. Aggiungi il tuo nome di carattere personalizzato a questo array inclusa l'estensione ( Chalkduster.ttf).
  4. Ora puoi usare [UIFont fontWithName:@"Chalkduster" size:16]nella tua applicazione.

Sfortunatamente, IB non consente di inizializzare le etichette con caratteri personalizzati. Vedi questa domanda per risolvere questo problema. La mia soluzione preferita è utilizzare una UILabelsottoclasse personalizzata :

@implementation CustomFontLabel

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

@end

3
Questo sembra essere supportato da 3.2, non solo da 4.0+
Jesse Rusak,

1
Grazie! Il problema che ho riscontrato è che i caratteri personalizzati sembrano inclinati un po 'in alto (spazio extra sotto) rispetto alle loro controparti integrate. Ho provato a utilizzare il repository FontLabel di GitHub, che aiuta in alcuni casi, ma non sempre.
Joe D'Andrea,

12
Vale la pena notare che la stringa che si passa al costruttore UIFont NON è il nome del file meno l'estensione è il nome interno del carattere. Ho avuto problemi nel caricare un font con un nome file che avevo abbreviato. Quando ho usato l'intero nome del font come contenuto nel file, il font è stato caricato correttamente.
slayton,

5
Ciò che ha appena detto Slayton è fondamentale. [UIFont fontWithName: si aspetta il "Nome completo" del font, che è visibile aprendolo nel Libro dei font e selezionando: Anteprima -> Mostra informazioni sui font
electromaggot

51

In Info.plist aggiungi la voce "Caratteri forniti dall'applicazione" e includi i nomi dei caratteri come stringhe:

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

Quindi controlla per assicurarti che il tuo carattere sia incluso eseguendo:

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

Nota che il nome del tuo file ttf potrebbe non essere lo stesso nome che usi quando imposti il ​​carattere per la tua etichetta (puoi usare il codice sopra per ottenere il parametro "fontWithName"):

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

36

modifica: questa risposta è defunta a partire da iOS3.2; usa UIAppFonts

L'unico modo in cui sono stato in grado di caricare con successo messaggi personalizzati UIFontè tramite il framework privato GraphicsServices.

Quanto segue caricherà tutti i .ttfcaratteri nel bundle principale dell'applicazione:

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 volta caricati, i caratteri possono essere utilizzati proprio come i caratteri forniti da Apple:

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

GraphicsServices può anche essere caricato in fase di esecuzione nel caso in cui l'API scompaia in 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;
}

nota a coloro che si chiedono, questo funziona, ma dovrai chiamare loadFonts prima di usare il font - non sembrano rimanere caricati in tutta l'applicazione
pixel

In OS 3.0 devi assolutamente usare il secondo secondo esempio, non dimenticare l'importazione. Ha funzionato abbastanza bene per me.
M. Ryan,

Un'altra nota: si tratta di un framework privato e lo carica in modo dinamico ... entrambi i quali probabilmente interromperanno l'accettazione della tua app nell'App Store.
pixel

Qual è la conclusione? Quali alternative a questo metodo?
Raj Pawan Gumdal,

1
Si noti inoltre che [NSString sizeWithFont:[UIFont fontWithName:@"customFont" size:14]];restituisce 0 larghezza e altezza per qualsiasi carattere personalizzato che ho provato.
Luke Mcneice,

34

Con iOS 8+ e Xcode 6+ puoi farlo facilmente. Ecco i passaggi:

1) Trascina e rilascia il font nella Xcodecartella dei file di supporto. Non dimenticare di contrassegnare la tua app nella sezione Aggiungi ai target . Da questo momento è possibile utilizzare questo tipo di carattere IBe selezionarlo dal pallet dei caratteri.

inserisci qui la descrizione dell'immagine

2) Per rendere disponibile questo carattere nel tuo dispositivo, apri il tuo info.pliste aggiungi Fonts provided by applicationchiave. Conterrà la chiave Item 0, è necessario aggiungere il nome del font come valore. Il nome del carattere può variare dal nome del file del carattere. Ma prima, prova ad aggiungere il tuo nome file nella maggior parte dei casi questo lavoro.

inserisci qui la descrizione dell'immagine

In caso contrario, questo articolo mi ha sempre aiutato.

Ecco un rapido frammento del codice di questo articolo per aiutarti a trovare il nome del tuo carattere.

func allFonts(){

   for family in UIFont.familyNames(){

       println(family)


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

   }

}

MODIFICARE

Voglio menzionare che è necessario aggiungere file di font alle fasi di costruzione del target , Copia risorse del pacchetto . Senza di essa, non vedrai il tuo carattere sul dispositivo. E potrebbe portare a comportamenti imprevisti.

Ad esempio, ho riscontrato un carattere bugquando UITextFieldho un carattere personalizzato, ma questo carattere non era nelle risorse del pacchetto Copia . E quando seguo viewcontrollerquesto textfield, c'è un ritardo di circa 4 secondi prima che la viewDidLoadfunzione fosse chiamata. Risolvere i problemi relativi ai font ha rimosso questo ritardo. Quindi, consiglio di controllarlo due volte. (rdar: // 20028250) A proposito, non sono stato in grado di riprodurre il bug, ma sono sicuro che il problema riguardasse il carattere.


1
Solo una nota. I caratteri personalizzati non sono disponibili in LaunchScreens anche se configurati correttamente in IB. Quale può essere la logica.
Rivera,

@Rivera Eeeek !!!, ottima nota! Non lo sapevo. L'alternativa possibile è usare UIImage con il testo, credo.
Dima Deplov,

@Rivera, grazie per quelle informazioni- è documentato ovunque? Stavo ripetutamente ripetendo i passi pensando di aver perso un passo.
spongessuck,

@spongessuck non è sicuro della tua domanda, ma ci sono alcuni documenti developer.apple.com/library/ios/documentation/StringsTextFonts/…
Dima Deplov

27

L'ho fatto in questo modo:

Carica il carattere:

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

Ora, nel tuo drawRect:, fai qualcosa del genere:

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

Fondamentalmente devi fare un po 'di forza bruta in loop attraverso il testo e andare in giro con il numero magico per trovare il tuo offset (qui, vedimi usando 29) nel carattere, ma funziona.

Inoltre, devi assicurarti che il carattere sia legalmente integrabile. Molti non lo sono e ci sono avvocati specializzati in questo genere di cose, quindi state attenti.


1
Sono sicuro che funziona bene, ma (davvero) non voglio scrivere il mio motore di layout per gestire tutto ciò che UILabel e UITextView attualmente fanno per me, in particolare il wrapping, il posizionamento e la modifica delle parole.
Airsource Ltd,

1
AFAICS, questo funziona solo con caratteri maiuscoli, quindi la chiamata 'uppercaseString'.
Martin Cote,

2
Sto effettuando il downvoting poiché il trucco del "numero magico" è un trucco puro che non funziona davvero. La vera soluzione è quella di ottenere la tabella cmap dal file TTF.
Martin Cote,

1
Questa è una bella informazione sull'uso dei caratteri direttamente con Core Graphics. Solo per l'aggiornamento per i futuri lettori: nei nuovi sistemi operativi, si potrebbe e si dovrebbe usare Core Text. In alternativa, si potrebbe usare CGContextShowTextAtPoint(), anche se non funziona con UTF-8.
Ivan Vučica,

20

Sì, puoi includere caratteri personalizzati. Fare riferimento alla documentazione su UIFont, in particolare, il fontWithName:size:metodo.

1) Assicurati di includere il carattere nella cartella delle risorse.

2) Il "nome" del carattere non è necessariamente il nome del file.

3) Assicurati di avere il diritto legale di usare quel carattere. Includendolo nella tua app, lo stai anche distribuendo e devi avere il diritto di farlo.


Hai davvero fatto questo successo? Non riesco a farlo funzionare, e google trova solo altre persone che hanno provato e fallito.
Airsource Ltd,

Sì. Io ho. Ancora una volta, assicurati di utilizzare il nome del font corretto.
Agosto

1
Quando dici "Il" nome "del carattere non è necessariamente il nome del file" ... come trovare il nome corretto?
Keith Fitzgerald,

7
Sì, questa risposta è sbagliata. Non puoi farlo fuori dalla scatola.
Jonathan Sterling,

Aggiornamento di iOS 9, i documenti UIFont non menzionano nulla sui caratteri personalizzati
Cbas,

20

Se si utilizza xcode 4.3, si deve aggiungere il fontal Build Phasesecondo Copy Bundle Resources, in base alla https://stackoverflow.com/users/1292829/arne nel thread, Personalizzato Font Xcode 4.3 . Questo ha funzionato per me, ecco i passaggi che ho fatto affinché i caratteri personalizzati funzionassero nella mia app:

  1. Aggiungi il carattere al tuo progetto. Ho trascinato e rilasciato i file OTF(o TTF) in un nuovo gruppo da me creato e accettato la scelta di xcode copying the files over to the project folder.
  2. Crea l' UIAppFontsarray con i tuoi caratteri elencati come elementi all'interno dell'array. Solo l' namesestensione, non l'estensione (ad esempio " GothamBold", " GothamBold-Italic").
  3. Fai clic sulla project namestrada nella parte superiore del Project Navigatorlato sinistro dello schermo.
  4. Fai clic sulla Build Phasesscheda che appare nell'area principale di xcode.
  5. Espandi la Copy Bundle Resourcessezione " " e fai clic su "+"per aggiungere il carattere.
  6. Seleziona il file del font dal navigatore dei file che si apre facendo clic su "+".
  7. Fallo per ogni font che devi add to the project.

12

Ecco le istruzioni passo passo su come farlo. Non sono necessarie librerie aggiuntive o codici speciali.

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

Il più delle volte il problema riguarda il tipo di carattere e non il metodo. Il modo migliore per farlo è usare un font che sicuramente funzionerà, come la verdana o la geogia. Quindi passare al carattere desiderato. Se non funziona, forse il nome del carattere non è corretto oppure il carattere non è ben formattato.


12

È molto semplice aggiungere un nuovo carattere sulla tua app iOS esistente.

Devi solo aggiungere il carattere, ad esempio font.ttf nella cartella delle risorse.

Apri la tua applicazione info.plist. Aggiungi una nuova riga come "Caratteri forniti dall'applicazione" e digita il nome del carattere come font.ttf.

E quando si imposta il carattere, fare come setFont:"corresponding Font Name"

Puoi controllare se il tuo carattere è stato aggiunto o meno NSArray *check = [UIFont familyNames];.

Restituisce tutto il carattere supportato dall'applicazione.


11

Consiglio di seguire uno dei miei brevi tutorial preferiti qui: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ da cui provengono queste informazioni.

Passaggio 1: trascina il tuo .ttf o .otf dal Finder nel tuo progetto

NOTA: assicurati di fare clic sulla casella "Aggiungi alle destinazioni" sulla destinazione principale dell'applicazione

Trascina i file dei caratteri nel tuo progetto e fai clic per aggiungerli al tuo target

Se hai dimenticato di fare clic per aggiungerlo al tuo target, fai clic sul file del carattere nella gerarchia del progetto e nel pannello di destra fai clic sul target dell'app principale nella sezione Appartenenza al target

come aggiungere caratteri al target dell'app se hai dimenticato

Per assicurarti che i caratteri facciano parte del target dell'app, assicurati che vengano visualizzati nelle risorse del pacchetto Copia in Fasi di generazione

come controllare le risorse per vedere se i caratteri fanno parte del target dell'app

Passaggio 2: aggiungi i nomi dei file dei caratteri al tuo Plist

Vai alle Proprietà target iOS personalizzate nella sezione Informazioni e aggiungi una chiave agli elementi in quella sezione chiamata Fonts provided by application(dovresti vederlo apparire come un'opzione mentre lo digiti e si configurerà come un array. Fai clic sulla piccola freccia per aprire gli elementi dell'array e digitare i nomi dei file .ttf o .otf che hai aggiunto per far sapere alla tua app che si tratta dei file dei caratteri che desideri siano disponibili

NOTA: se l'app si arresta in modo anomalo subito dopo questo passaggio, controlla l'ortografia degli elementi che aggiungi qui

esempio esempio con caratteri personalizzati aggiunti

Passaggio 3: scopri i nomi dei caratteri in modo da poterli chiamare

Molto spesso il nome del font visto dalla tua applicazione è diverso da quello che pensi sia basato sul nome del file per quel font, inseriscilo nel tuo codice e guarda il registro che la tua applicazione fa per vedere quale nome di font chiamare nel tuo codice

veloce

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

Obiettivo C

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

Il tuo registro dovrebbe assomigliare a questo:

Esempio di ricerca log per trovare i nomi dei font

Passaggio 4: utilizzare il nuovo carattere personalizzato utilizzando il nome del passaggio 3

veloce

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

Obiettivo C

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

10

Trova il TTF nel finder e "Ottieni informazioni". Sotto l'intestazione "Nome completo:" mi ha dato un nome con cui poi ho usato fontWithName(ho appena copiato e incollato il nome esatto, in questo caso non era necessaria l'estensione '.ttf').


8

Non è ancora uscito, ma la prossima versione di cocos2d (2d game framework) supporterà i caratteri bitmap a lunghezza variabile come mappe dei caratteri.

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

L'autore non ha una data di uscita ben definita per questa versione, ma ho visto un post che indicava che sarebbe stato nel prossimo mese o due.


8

Un avviso importante: è necessario utilizzare il "nome PostScript" associato al carattere, non il nome completo o il nome della famiglia. Questo nome può spesso essere diverso dal normale nome del carattere.


7

segui questo passaggio

1) Copia il tuo carattere nel tuo progetto

2) apri il tuo .plistfile in modalità codice sorgente ... (Nota: non aprire info.plist)

3) Prima di ciò: fai clic con il pulsante destro del mouse sul tuo carattere e aprilo in fontforge o in un editor simile e install nel tuo sistema, dovrebbe essereinstall

4) Digita questo

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

5) Digita questo codice nel tuo class .m

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

Qui lblPoints cambierà dal tuo UILabel

Fatto!! Se il tuo carattere non funziona, controlla prima la compatibilità dei caratteri


1
perché non aprire info.plist?
Raptor,

perché spazio tra Myraid & Pro al 5 ° punto quando non c'è nessuno in Plist al punto 4?
jayant rawat,

@jayantrawat Il nome del font che viene mostrato nel sistema dopo aver installato il font e .plist è il nome del file del font [.ttl o otf]
Kirtikumar A.

@KirtikumarA. si capito ... implementato con successo in app ..
jayant rawat

@jayantrawat se la mia soluzione ti aiuta, ti chiedo di dare un voto sulla risposta in modo che altri utenti possano aiutare allo stesso modo
Kirtikumar A.

6

Forse l'autore ha dimenticato di assegnare al font un nome Mac FOND ?

  1. Apri il carattere in FontForge quindi vai su Elemento> Informazioni carattere
  2. C'è un'opzione "Mac" in cui è possibile impostare il nome FOND.
  3. In File> Esporta carattere puoi creare un nuovo ttf

Puoi anche provare l'opzione "Apple" nella finestra di dialogo di esportazione.

NOTA BENE : non sono uno sviluppatore di iPhone!


6

Ho provato i vari suggerimenti in questa pagina su iOS 3.1.2 e queste sono le mie conclusioni:

Il semplice utilizzo [UIFont fontWithName:size:]con i caratteri nella directory Risorse non funzionerà, anche se il nome FOND è impostato utilizzando FontForge.

[UIFont fontWithName:size:]funzionerà se i caratteri vengono caricati per primi utilizzando GSFontAddFromFile. Ma GSFontAddFromFilenon fa parte di iOS 3.1.2, quindi deve essere caricato in modo dinamico come descritto da @rpetrich.


5

Consultare ATSApplicationFontsPath

Una semplice voce di plist che ti consente di includere i file dei font nella cartella delle risorse dell'app e "funzionano" nella tua app.


Hai provato questo sul dispositivo? Non ho avuto gioia, e googling suggerisce che questa voce plist non è supportata su iPhone, anche se è documentata per il sistema operativo iPhone.
Airsource Ltd,

1
Siamo spiacenti, lo sto usando solo in un'app OS X al momento.
Matt Sephton,

5

Ho combinato alcuni dei consigli di questa pagina in qualcosa che funziona per me su iOS 5.

Innanzitutto, devi aggiungere il carattere personalizzato al tuo progetto. Quindi, è necessario seguire i consigli di @iPhoneDev e aggiungere il carattere al file info.plist.

Dopo averlo fatto, questo funziona:

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

Tuttavia, devi conoscere il nome Postscript del tuo carattere. Segui i consigli di @Daniel Wood e premi command-i mentre sei in FontBook.

Quindi, goditi il ​​tuo carattere personalizzato.


5

Per prima cosa aggiungi il carattere in formato .odt alle tue risorse, in questo caso useremo DINEngschriftStd.otf, quindi useremo questo codice per assegnare il carattere all'etichetta

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

Per assicurarti che il tuo carattere sia caricato sul progetto, chiama

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

Nella .plist devi dichiarare il carattere. Basta aggiungere un record "Caratteri forniti dall'applicazione" e aggiungere una stringa elemento 0 con il nome del carattere (DINEngschriftStd.otf)


5

Per iOS 3.2 e versioni successive: utilizzare i metodi forniti da più sopra, che sono:

  1. Aggiungi il tuo file di font (ad esempio Chalkduster.ttf ) nella cartella Risorse del progetto in XCode.
  2. Apri info.plist e aggiungi una nuova chiave chiamata UIAppFonts. Il tipo di questa chiave dovrebbe essere array.
  3. Aggiungi il nome del tuo font personalizzato a questo array inclusa l'estensione (" Chalkduster.ttf ").
  4. Utilizzare [UIFont fontWithName:@"Real Font Name" size:16]nella propria applicazione.

MA il "Nome carattere reale" non è sempre quello che vedi nel Fontbook. Il modo migliore è chiedere al dispositivo quali caratteri vede e quali sono i nomi esatti.

Uso l'Uifont-name-grabber pubblicato su: uifont-name-grabber

Rilascia i caratteri desiderati nel progetto xcode, aggiungi il nome del file al suo plist ed eseguilo sul dispositivo per il quale stai costruendo, ti invierà per email un elenco completo di caratteri usando i nomi che ti UIFont fontWithName:aspetti.


5

La soluzione migliore è aggiungere una " Fonts provided by application" nuova proprietà al tuo info.plistfile.

Quindi, puoi utilizzare il tuo carattere personalizzato come al solito UIFont.


3

C'è un nuovo modo di usare caratteri personalizzati, a partire da iOS 4.1. Ti consente di caricare i caratteri in modo dinamico, che si tratti di file inclusi con l'app, dei dati scaricati o di quello che hai. Ti consente anche di caricare i caratteri quando ne hai bisogno, mentre il vecchio metodo li carica tutti al momento dell'avvio dell'app, che può richiedere troppo tempo se hai molti caratteri.

Il nuovo metodo è descritto a ios-dynamic-font-loading

Si utilizza la CTFontManagerRegisterGraphicsFontfunzione, assegnandole un buffer con i dati del font. È quindi disponibile per UIFonte visualizzazioni Web, proprio come con il vecchio metodo. Ecco il codice di esempio da quel 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);

Ho usato questo codice ma ottengo l'errore & Impossibile caricare il carattere: l'operazione non può essere completata. (errore com.apple.coretext 105 - Impossibile registrare CGFont '<CGFont (0x14fe7df0): Shruti>')
Hiren

Secondo la documentazione, l'errore 105 è kCTFontManagerErrorAlreadyRegistered"Il file è già stato registrato nell'ambito specificato". developer.apple.com/library/ios/#documentation/Carbon/Reference/…
David M.

3

Swift, code way: (funziona anche con swift 2.0)

Aggiungi i caratteri richiesti al tuo progetto (proprio come l'aggiunta di immagini, trascina semplicemente su Xcode), assicurati che siano mirati al tuo progetto,
aggiungi questo metodo e carica caratteri personalizzati (consigliato in 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: "")
    }

}

Usa esempio:

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

Usa il carattere:

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

Mi chiedo solo, come mai non aggiungere semplicemente il carattere nel tuo Info.plist sembra molto più lavoro essenzialmente per la stessa cosa.
Stephen Jesse,

2

È possibile aggiungere i file "FONT" richiesti nella cartella delle risorse. Quindi vai al Info.plistfile di progetto e usa la chiave "Caratteri forniti dall'applicazione" e valore come "FONT NAME".

Quindi puoi chiamare il metodo [UIFont fontwithName:@"FONT NAME" size:12];


1

Ho reso tutto possibile ma i nuovi caratteri non vengono visualizzati, quindi ho trovato la soluzione:

Quando si trascinano i file fot (otf o ttf) NON dimenticare di selezionare la casella di controllo in "Aggiungi ai target".

Dopo aver fatto ciò apparirà il tuo carattere e tutto funzionerà bene.


1

Sebbene alcune delle risposte sopra siano corrette, ho scritto un tutorial visivo dettagliato per le persone che hanno ancora problemi con i caratteri.

Le soluzioni sopra le quali ti dicono di aggiungere il carattere al plist e usarlo

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

sono quelli corretti. Si prega di utilizzare ora qualsiasi altro modo di hacking. Se hai ancora problemi con la ricerca dei nomi dei font e l'aggiunta di questi, ecco il tutorial -

Utilizzo di caratteri personalizzati nell'applicazione iOS


Ho appena provato questo. Sembra funzionare ma il mio carattere è minuscolo, indipendentemente dalle dimensioni che ho impostato. Per quello che vale, sto usando un file OTF liberamente disponibile: philsfonts.com/index.php/free_fonts
ari gold

Provalo con qualsiasi altro carattere personalizzato e se il problema persiste, fammi sapere. Se funziona in questo modo, allora c'è un problema con il tuo carattere.
Bharat Gulati,

1

Sì, puoi usare caratteri personalizzati nella tua applicazione

passo dopo passo lì:

Aggiungi i tuoi file di font personalizzati al tuo progetto in file di supporto

Aggiungi una chiave al tuo file Info.plist chiamato UIAppFonts.

Trasforma questa chiave in un array

Per ogni carattere che hai, inserisci il nome completo del tuo file di caratteri (inclusa l'estensione) come elementi nell'array UIAppFonts

Salva Info.plist Ora nella tua applicazione puoi semplicemente chiamare [UIFont fontWithName: @ "dimensione del tuo nome carattere personalizzato": 20] per ottenere il carattere personalizzato da utilizzare con i tuoi UILabels dopo averlo applicato se non ottieni il carattere corretto, quindi fai doppio clic sul carattere personalizzato e osserva attentamente il nome del carattere lato superiore in arrivo e copia questo carattere, incolla, qui [UIFont fontWithName: @ "qui oltre il nome del tuo carattere personalizzato" dimensione: 20]

spero che otterrai una risposta corretta


1

Sì, puoi usare caratteri personalizzati nella tua applicazione

passo dopo passo lì:

  • Aggiungi i tuoi file di font personalizzati al tuo progetto in file di supporto
  • Aggiungi una chiave al tuo Info.plist file chiamato UIAppFonts.
  • Trasforma questa chiave in un array
  • Per ogni carattere che hai, inserisci il nome completo del tuo file di caratteri (inclusa l'estensione) come elementi nell'array UIAppFonts
  • Salva Info.plist ora nella tua applicazione puoi semplicemente chiamare [UIFont fontWithName:@"your Custom font Name" size:20]per ottenere il carattere personalizzato da usare con il tuoUILabels

dopo aver applicato questo se non ottieni il carattere corretto, fai doppio clic sul carattere personalizzato e vedi attentamente il nome del carattere lato superiore sta arrivando e copia questo carattere, incolla, qui [UIFont fontWithName:@" here past your Custom font Name" size:20] spero che otterrai la risposta corretta

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.