自定义字体无法在iPhone设备上运行

时间:2012-01-16 08:52:13

标签: iphone objective-c ios5 xcode4.2 objective-c++

我正在尝试将外部.ttf字体加载到我的一个iOS项目中。该字体在模拟器中工作正常,但无法在实际设备上显示。

我正在使用LLVM GCC 4.2编译器。在另一个使用Apple LLVM编译器3.0的项目中,相同的字体可以使用。我不明白我怎么解决它?使用LLVM GCC 4.2编译器需要遵循哪些步骤?

4 个答案:

答案 0 :(得分:8)

确保将其添加到“目标”下 - > '构建阶段' - > '复制捆绑资源'。我遇到了类似的问题,并通过手动将其添加到此列表中,字体开始显示在设备上。

答案 1 :(得分:3)

对于代码帮助下的自定义字体

UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 240, 40)];
[label1 setFont: [UIFont fontWithName: @"Grinched" size:24]];
[label1 setText:@"Grinched Font"];
[[self view] addSubview:label1];

UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 240, 40)];
[label2 setFont: [UIFont fontWithName: @"Energon" size:18]];
[label2 setText:@"Energon Font"];
[[self view] addSubview:label2];

您也可以下载示例代码和教程here.

答案 2 :(得分:2)

您对字体的选择有限,因此您必须在可用字体之间进行选择......

这个答案可作为参考: What fonts do iPhone applications support?

答案 3 :(得分:1)

首先加载如下字体:

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

}

然后按如下方式使用它们:

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

}

在某些情况下,您可能无法使用某些互联网下载的字体。 Here是相同的参考: