1、做阅读APP,现在需要添加不同的阅读字体
如果字体过多,并不适宜打包到APP项目中,会增加包体积。将字体下载到本地,然后加载字体数据,即可。
2、 三方字体下载使用。
很多用到的三方字体并未在系统字体库中,关于系统字体的详细分析,可参考一文让你彻底了解iOS字体相关知识。现在使用已经下载好的站酷小微字体测试,介绍如何使用。
3、 代码实例
完整字体使用代码。项目运行过程中注册一次即可。
/// 字体更换
import UIKit
class HsuFontHandler: NSObject {
var fontNameString: String?
static let shared = HsuFontHandler()
private override init() {
super.init()
}
/// 设置字体
func setupFont() {
let path = Bundle.main.path(forResource: "XiaoweiLogo", ofType: "otf")
if path == nil {
print("未找到本地字体资源")
return
}
fontNameString = customFontWith(path: path!, size: 18)
}
/// 根据路径资源获取字体
///
/// - Parameters:
/// - path: 资源地址
/// - size: 字体大小
/// - Returns: 字体名
private func customFontWith(path: String, size: CGFloat) -> String? {
let fontUlr = URL(fileURLWithPath: path)
let fontData = CGDataProvider(url: fontUlr as CFURL)
guard let fontDataProvider = fontData else {
print("字体资源加载失败")
return nil
}
let fontRef = CGFont(fontDataProvider)
let error: UnsafeMutablePointer<Unmanaged<CFError>?>? = nil
guard let fontReff = fontRef else {
print("字体转换失败")
return nil
}
// 注册字体
let regiester = CTFontManagerRegisterGraphicsFont(fontReff, error)
if !regiester {
print("字体注册失败")
return nil
}
// 字体名
guard let fontName = fontReff.fullName else {
print("获取字体失败")
return nil
}
return fontName as String
}
使用:
class ViewController: UIViewController {
@IBOutlet weak var fontLabel: UILabel!
private let Text = "今天是个好天气"
override func viewDidLoad() {
super.viewDidLoad()
fontLabel.text = Text
// 设置字体
HsuFontHandler.shared.setupFont()
}
// 特殊字体
@IBAction func changeFont(_ sender: Any) {
fontLabel.font = UIFont(name: HsuFontHandler.shared.fontNameString ?? "", size: 20) ?? UIFont.systemFont(ofSize: 20)
}
// 正常字体
@IBAction func normalFont(_ sender: Any) {
fontLabel.font = UIFont.systemFont(ofSize: 20)
}
}
效果:
正常字体 特殊字体
网友评论