我想有一个应用程序包括一个自定义字体渲染文本,加载它,然后使用它与标准UIKit元素如UILabel。这可能吗?
当前回答
首先将.odt格式的字体添加到资源中,在本例中我们将使用DINEngschriftStd。Otf,然后使用这段代码将字体分配给标签
[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];
要确保你的字体被加载到项目中,只需调用
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
在.plist中,必须声明字体。只需添加一个'由应用程序提供的字体'记录,并添加一个带有字体名称的item 0字符串(DINEngschriftStd.otf)
其他回答
是的,您可以包括自定义字体。参考UIFont的文档,特别是fontWithName:size:方法。
1)确保在你的资源文件夹中包含了该字体。
2)字体的“名称”不一定是文件名。
3)确保你有使用这种字体的合法权利。通过把它包含在你的应用中,你也在传播它,你需要有这样做的权利。
首先将.odt格式的字体添加到资源中,在本例中我们将使用DINEngschriftStd。Otf,然后使用这段代码将字体分配给标签
[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];
要确保你的字体被加载到项目中,只需调用
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
在.plist中,必须声明字体。只需添加一个'由应用程序提供的字体'记录,并添加一个带有字体名称的item 0字符串(DINEngschriftStd.otf)
编辑:从iOS 3.2开始,这个功能是内置的。如果您需要支持3.2版本,您仍然可以使用这个解决方案。
我创建了一个扩展UILabel并处理加载.ttf文件的简单模块。我在Apache许可下发布了它,并把它放在github这里。
重要的文件是FontLabel.h和FontLabel.m。
它使用了Genericrich回答中的一些代码。
在这里浏览源代码。
OR
复制您的字体文件到资源 为你的信息添加一个键。名为UIAppFonts的plist文件。("应用程序提供的字体) 将该键设置为数组 对于你拥有的每种字体,输入字体文件的全名(包括扩展名)作为UIAppFonts数组的项 保存Info.plist 现在在你的应用程序中,你可以简单地调用[UIFont fontWithName:@"CustomFontName" size:15]来获得自定义字体来使用你的UILabels和UITextViews等…
更多信息
是的,你可以在你的应用程序中使用自定义字体
按照下面的步骤:
将自定义字体文件添加到项目的支持文件中 为你的信息添加一个键。名为UIAppFonts的plist文件。 将该键设置为数组 对于你拥有的每种字体,输入字体文件的全名(包括扩展名)作为UIAppFonts数组的项 保存Info.plist 现在在你的应用程序中,你可以简单地调用[UIFont fontWithName:@"你的自定义字体名称"大小:20]来获得与你的UILabels一起使用的自定义字体
应用这个后,如果你没有得到正确的字体 然后双击自定义字体,仔细看顶部字体的名字是来的 然后复制这个字体,粘贴到这里[UIFont fontWithName:@" here past your Custom fonts Name" size:20] 我希望你能得到正确答案
编辑:这个答案在iOS3.2失效;使用UIAppFonts
我能够成功加载自定义UIFonts的唯一方法是通过私有的GraphicsServices框架。
下面将加载应用程序主包中的所有.ttf字体:
BOOL GSFontAddFromFile(const char * path);
NSUInteger loadFonts()
{
NSUInteger newFontCount = 0;
for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
newFontCount += GSFontAddFromFile([fontFile UTF8String]);
return newFontCount;
}
一旦字体被加载,它们就可以像apple提供的字体一样使用:
NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];
GraphicsServices甚至可以在运行时加载,以防API在未来消失:
#import <dlfcn.h>
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]);
}
}
return newFontCount;
}
推荐文章
- 如何删除默认的导航栏空间在SwiftUI导航视图
- 如何在iOS中使用Swift编程segue
- Swift -整数转换为小时/分钟/秒
- Swift:声明一个空字典
- 在成功提交我的应用程序后,“太多符号文件”
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- 如何从UIImage (Cocoa Touch)或CGImage (Core Graphics)获取像素数据?
- 在Swift中如何调用GCD主线程上的参数方法?
- NSLayoutConstraints是可动画的吗?
- iOS -构建失败,CocoaPods无法找到头文件
- CFNetwork SSLHandshake iOS 9失败
- 请求失败:不可接受的内容类型:文本/html使用AFNetworking 2.0
- 缺少推荐的图标文件-该包不包含iPhone / iPod Touch的应用程序图标,像素为“120x120”,png格式
- 以编程方式创建segue