2009-07-28 4 views
0

Je souhaite utiliser une police personnalisée dans une application iPhone. J'ai déjà deux fichiers 'valise de police' et son fichier supporté 'postscript type 1'. J'utilise comme ceci:Utilisation de la police personnalisée

NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"Myfont" ofType:nil]; 
if(fontPath == nil) 
{ 
    return; 
} 
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([ fontPath UTF8String]); 
if(fontDataProvider == nil) 
{ 
    return; 
} 
// Create the font with the data provider, then release the data provider. 
customFont = CGFontCreateWithDataProvider(fontDataProvider); 
if(customFont != nil) 
{ 
    bLoadedFontFile = YES; 
} 
CGDataProviderRelease(fontDataProvider); 
    ... 

'Myfont' est un fichier postscript. CGDataProviderCreateWithFilename API renvoie NULL.

Merci Virendra ID E-Mail: [email protected]

Répondre

0

Je suppose que le nom du fichier de la police est MyFont. < une certaine extension >? Si oui, je crois que vous devrez peut-être définir le type dans l'appel à pathForResource ou ajouter un suffixe au nom de la ressource. En outre, j'ai utilisé les informations dans this SO question pour rendre les polices personnalisées sur l'iPhone avec succès. Cependant, les polices en question étaient au format True Type.

+0

Mon fichier personnalisé n'a pas d'extension. Mon type de police est 'valise de police' qui n'a pas d'extension. merci Virendra –

+0

est une police postscript, ils n'ont généralement pas d'extensions. – j2emanue

3

Cela fait un moment maintenant, et je suis sûr que vous avez trouvé votre solution. Voici une façon agréable et propre de le faire maintenant:

Enregistrez votre fichier .ttf ou .otf dans votre répertoire de projet et importez-le dans Xcode. Dans .Plist, ajoutez le champ UIAppFonts (un tableau) ou choisissez l'option "Polices fournies par l'application" et ajoutez le nom du fichier à la première entrée.

Créer une instance de UIFont dans votre .h:

UIFont *myFont; 

... 

@property (nonatomic, retain) UIFont *myFont; 

puis synthétiser dans .m: @ synthesize myFont

Dans une méthode ou une action, appelez NSLog(@"%@", [UIFont familyNames]);

Trouvez votre nouvelle police dans la liste et prenez le nom exactement comme il apparaît

Dans votre méthode ViewDidLoad() ou où vous voulez, code

myFont = [UIFont fontWithName:@"FontNameFromPreviousStep" size:20]; 

Utilisez vos méthodes pour changer la police de l'étiquette ou tout autre: label.font = myFont;

Nettoyer le NSLog() donc il ne pas utiliser les ressources de mémoire

0

ces chargera tous « TTF » polices sur vous App et mettre à la disposition Lode par

[UIFont fontWithName:@"FontFamilyName" size:20]; 

XXXX.m

#import <dlfcn.h> 

-(void)viewDidLoad 
{ 
[self loadFonts]; 
} 

-(void)loadFonts{ 
NSLog(@" Fonts NO : %d",[[UIFont familyNames] count]); 
NSlog(@"Start Load Fonts"); 
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]); 
NSLog(@" Fonts NO : %d",[[UIFont familyNames] count]); 
NSLog(@" Font Family Names : %@",[UIFont familyNames]);    
NSlog(@"End Load Fonts"); 
}} 
// return newFontCount; 
}} 
Questions connexes