我正在开发一款游戏,我想在我的应用中使用自定义字体。我正在使用SpriteKit,如果这很重要的话。我已尝试使用此https://github.com/deni2s/IBCustomFonts,但我无法使用此字体http://www.fontspace.com/freaky-fonts/emulogic
我尝试了各种各样的东西,并且我在应用的info.plist上注册了字体......有谁知道发生了什么?
答案 0 :(得分:277)
首先,我假设SpriteKit没有任何区别。
最后,您希望在应用启动时列出所有字体,只是为了查看字体的可用名称。你会用这一小段代码来做到这一点:
NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++)
{
NSString *fontFamily = [fontFamilies objectAtIndex:i];
NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
NSLog (@"%@: %@", fontFamily, fontNames);
}
在打印结果中搜索您的字体,例如,我会搜索“Josefin”,我会看到实际的字体名称是“JosefinSansStd-Light”。之后,您只需要使用该字体:
UIFont *customFont = [UIFont fontWithName:@"JosefinSansStd-Light" size:20];
在iOS8中,您add your fonts直接指向项目,它们在界面构建器中可见。 修改您的代码以解决此问题,但以编程方式设置iOS7的字体并在xCode6界面构建器中选择它。 PS。 xCode6中的界面构建器为您提供了正确的字体名称,您可以将其复制粘贴到下面的代码中。
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
if(SYSTEM_VERSION_LESS_THAN(@"8.0"))
{
UIFont *customFont = [UIFont fontWithName:@"OpenSans-Light" size:32];
self.registerLabel.font = customFont;
}
希望这会有所帮助,欢呼。
答案 1 :(得分:24)
使用自定义字体没问题,我做到了。请按照以下步骤操作:
建议,将该名称添加为..Prefix.pch文件中的宏。如果必须多次使用该字体,在项目中使用它会更容易。
我认为您遇到的问题是您正确注册了字体,但未将其复制到应用包中。因此,当应用程序执行时,它找不到字体。这就是为什么第2步很重要。我花了很多时间试图在第一时间弄明白:)
答案 2 :(得分:20)
快速实现这一目标
如果您想在应用启动时列出所有字体,只是为了查看字体的可用名称。你可以用这一小段代码来做到这一点:
UIFont.familyNames.forEach {
print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))")
}
答案 3 :(得分:5)
我多次尝试过,从来没有能够得到这些答案。唯一的方法是我有一个自定义字体,以遵循接受的答案中的说明然后在故事板中创建一个使用该字体的隐藏标签。我可以以编程方式使用该字体。我知道奇怪和hacky,但它对我有用。
答案 4 :(得分:3)
如果您使用Xcode 6,它就会变得如此简单。只需在项目中添加font
文件夹,将您的字体添加到文件夹中,就可以了。
答案 5 :(得分:3)
如果上述方法都不适合您,并且您碰巧使用自定义字体&#34;以编程方式&#34;只是(即你没有在任何xib中使用它)然后你需要在一个xib中的任何地方至少使用它一次。
(PS Stuart Clark - 已经回答了这个问题,所以请不要相信我。但是,我决定将其改写并作为一个单独的答案发布,因为我错过了他的答案,当我不知道时我不清楚读取它。当我在xib中测试自定义字体时,我偶然发现了这个解决方案,我看到它在其他地方以编程方式工作,但是当我从xib中删除字体时,它以编程方式停止工作。)
答案 6 :(得分:2)
针对Swift 3进行了更新。
let fontFamilies:[String] = UIFont.familyNames
for fontFamily: String in fontFamilies {
let fontNames: [String] = UIFont.fontNames(forFamilyName: fontFamily)
print("\(fontFamily) \(fontNames)");
}
答案 7 :(得分:0)
也许是一个快速修复 - 当字体已经工作时,这对我来说是这样的,但是一个新的例如标签没有显示所需的字体:
干净,深度清理并清空派生数据文件夹。
答案 8 :(得分:0)
please try below code.
@end
@implementation UILabel (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UITextField (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UIButton (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.titleLabel.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self.titleLabel setFont:[UIFont fontWithName:self.titleLabel.font.fontName size:newsize]];
}
@end
@end
@interface UILabel (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UITextField (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UIButton (CustomFont)
-(void)setFontName:(NSString *)value;
@end