iOS 项目中添加自定义字体
摘要:
- 往项目中添加自定义字体
- 项目中运行时, 通过网络下载并使用字体
1. 项目中添加静态字体
- 准备好字体资源,直接拖拽到项目中,选择好所属 target
- Info.plist 文件完整添加字体资源, 注意后缀要完整写上
添加后效果如图, 也可以使用源文件的方式,直接拷贝下面实例代码添加
Info.plist 源码如下:
1
2
3
4
5
<key>UIAppFonts</key>
<array>
<string>DynamicFont-Regular.ttf</string>
<string>my-Regular.ttf</string>
</array>
添加完成之后, 项目中就能直接使用该字体了, 具体的字体名称可以通过打印 UIFont.familyNames
来查看.
2. 运行时注册字体并使用
项目中会有一些场景, 需要在运行时下载字体并使用.
核心就是向 CTFontManagerRegisterGraphicsFont
注册字体. 示例代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 首先获取资源 URL, 然后通过路径注册 (如果是本地文件)
let fileUrl = Bundle.main.url(forResource: "sa-digital-number", withExtension: ".ttf")!
registerFont(url: fileUrl)
// 通过 URL 注册字体 (也可以自己封装通过 Data 来注册字体)
func registerFont(url: URL) {
if let fontDataProvider = CGDataProvider(url: url as CFURL),
let newFont = CGFont(fontDataProvider),
CTFontManagerRegisterGraphicsFont(newFont, nil)
{
// Font registration successful
} else {
if let error = CFErrorCreate(nil,
CFStringCreateWithCString(
nil,
"Failed to load font",
CFStringBuiltInEncodings.UTF8.rawValue),
0,
nil) {
let errorDescription = CFErrorCopyDescription(error)
if let description = errorDescription {
print("Failed to load font: \(description)")
//CFRelease(description)
}
}
}
}
同样的, 注册完成之后就可以使用了, 具体的字体名称可以通过打印 UIFont.familyNames
来查看.
THE END.
本文由作者按照 CC BY 4.0 进行授权