iOS 7中的自定义字体

z31licg0  于 2022-12-24  发布在  iOS
关注(0)|答案(9)|浏览(630)

我正在开发一款游戏,希望在应用中使用自定义字体。我正在使用SpriteKit(如果这很重要的话)。我尝试使用此https://github.com/deni2s/IBCustomFonts,但无法使用此字体http://www.fontspace.com/freaky-fonts/emulogic
我尝试了各种方法,我已经在应用程序的info.plist上注册了字体......有人知道这是怎么回事吗?

klr1opcd

klr1opcd1#

首先,我假设SpriteKit没有任何区别。
1.您需要将.otf或.ttf格式的字体复制到项目中。例如,在支持文件中。
1.您需要编辑**.plist文件。将“Fonts provided by application”键添加到您的plist中,并在Item 0中复制您复制到支持文件中的字体的确切文件名,扩展名为WITH。例如:“约瑟芬无标准光_0.otf”
1.请确保导入到应用的字体正在打包到应用本身中。为此,请依次选择
目标**、构建阶段复制捆绑包资源。如果在其中看不到字体,请从支持文件中拖动字体。
最后,你想在应用程序启动时列出所有字体,以查看字体的可用名称。你可以使用以下代码:

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设置字体,并在xCode 6界面构建器中选择它。PS。xCode 6中的界面构建器为您提供了正确的字体名称,您可以将其复制粘贴到下面的代码中。

#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;  
}
koaltpgm

koaltpgm2#

使用自定义字体没有问题,我做到了。请按照以下步骤操作:
1.在你的info.plist中注册字体,添加“应用程序提供的字体”条目。输入字体文件名,而不是字体名。比如font.ttf(我想你已经这么做了)
1.在项目导航器中转到您的项目,点击项目名称并转到“build phases”,然后向下看“Copy Bundle Resources”,转到底部,有很多文件并搜索“+”号。一个弹出窗口将打开,其中包含您的项目文件。搜索您的字体文件并将其添加到包中。
1.最后检查字体名称。当你在代码中使用它时,你必须使用字体名称,而不是文件名。要知道字体名称,双击Finder中的字体文件,一个显示该字体的窗口就会打开。检查窗口标题,那是你必须使用的字体的名称。
还有建议,把那个名字作为宏添加到你的..Prefix.pch文件中。如果你必须多次使用这个字体,在你的项目中使用它会更容易。
我认为您遇到的问题是,您正确注册了字体,但没有将其复制到应用程序包中。因此,当应用程序执行时,它找不到字体。这就是为什么第二步很重要。我花了很多时间试图在第一次时弄清楚:)

zkure5ic

zkure5ic3#

为了迅速实现这一目标
如果你想在应用程序启动时列出所有的字体,只是为了查看字体的可用名称,你可以使用下面的代码:

UIFont.familyNames.forEach {
        print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))")
    }
9w11ddsr

9w11ddsr4#

我从来没有能够得到这些答案的工作已经尝试了多次。唯一的方法,我曾经得到了一个自定义字体在它遵循的指示,在接受的答案,然后创建一个隐藏的标签在故事板使用的字体。我可以使用字体编程。奇怪和hacky我知道,但它为我工作。

yzxexxkh

yzxexxkh5#

如果你使用的是Xcode 6,那么这就非常简单了,只要在你的项目中添加一个font文件夹,然后在文件夹中添加你的字体,你就可以开始了。

n3h0vuf2

n3h0vuf26#

如果上面的方法都不适合你,并且你碰巧只“编程”使用你的自定义字体(也就是说,你没有在任何xib中使用它),那么你将需要在一个xib中的任何地方至少使用一次。
(P.S. Stuart Clark -已经回答了这个问题,所以请不要记我的功劳。但是,我决定重新措辞,并将其作为一个单独的答案发布,因为我错过了他的答案,当我阅读它时,我并不清楚。当我在xib中测试自定义字体时,我偶然发现了这个解决方案,我看到它在其他程序中工作,但当我从xib中删除字体时,它停止了编程工作。)

vojdkbi0

vojdkbi07#

更新Swift 3。

let fontFamilies:[String] = UIFont.familyNames

for fontFamily: String in fontFamilies {
    let fontNames: [String] = UIFont.fontNames(forFamilyName: fontFamily)
    print("\(fontFamily)  \(fontNames)");
}
kqhtkvqz

kqhtkvqz8#

也许是一个快速修复-这为我做了它时,字体已经工作,但一个新的,例如标签没有显示所需的字体:
清理、深度清理和清空派生数据文件夹。

6tr1vspr

6tr1vspr9#

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

相关问题