使用自定义字体

时间:2009-07-28 10:28:39

标签: iphone fonts

我想在iPhone应用程序中使用自定义字体。我已经有两个文件'font suitcase'及其支持的文件'postscript type 1'。我这样使用:

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'是一个postscript文件。 CGDataProviderCreateWithFilename API返回NULL

由于 Virendra 电子邮件ID:virendra.p@codewalla.com

3 个答案:

答案 0 :(得分:3)

现在已经有一段时间了,我相信你已经提出了解决方案。现在这是一个很好,干净的方法:

将.ttf或.otf文件保存在项目目录中并导入Xcode。

在.Plist中添加字段UIAppFonts(数组)或选择“应用程序提供的字体”选项,并将文件名添加到第一个条目。

在.h中创建UIFont实例:

UIFont *myFont;

...

@property (nonatomic, retain) UIFont *myFont;

然后在.m:@ synthesize myFont

中合成它

在某些方法或操作中,请致电NSLog(@"%@", [UIFont familyNames]);

在列表中找到您的新字体,并准确记下显示的名称

在ViewDidLoad()方法中或您想要的任何地方,代码

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

使用您的方法更改标签的字体或其他内容:label.font = myFont;

清理NSLog(),使其不使用内存资源

答案 1 :(得分:0)

所以我假设字体的文件名是MyFont。< some-extention>?如果是这样,我相信您可能需要在对pathForResource的调用中设置类型,或者在资源名称后附加一个后缀。

另外,我已经使用this SO question中的信息成功地在iPhone上呈现自定义字体。但是,有问题的字体是True Type格式。

答案 2 :(得分:0)

这些将在你的App上加载所有“ttf”字体,并通过

提供给lode
[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;
}}