CRo*_*oig 1 cocoa-touch custom-font ios xcode-workspace
我正在尝试根据功能封装和组织我的 Xcode 项目。为了实现这一点,我正在创建一个嵌入在主项目中的框架项目。该框架包含所有应用程序外观(带有颜色定义和自定义字体)。
我的项目结构类似于:
MainProject
|_ Appearance.xcodeproj
| |_ ...
| |_ Controller.swift
| |_ Resources
| |_ Font1.ttf
| |_ Font2.ttf
| |_ Products
| |_ Appearance.framework
|_ ...
Run Code Online (Sandbox Code Playgroud)
这个想法是只编译一次 Appearance.framework 并使用主项目中嵌入的自定义字体。尽管标头已公开并且没有编译错误,但我遇到了运行时错误。
框架中的控制器使用的是UIFont(name: "Font1", size: 9)!
but,返回的是nil
我阅读了有关在主项目 Info.plist 上添加字体完整路径的信息。然而,该框架是本地的,不受 cocoapods 管理。所以输出是派生数据。
这是嵌入这种框架的正确方法吗?任何人都可以为此目的提供解决方案吗?我对改变方法没有任何问题。
更新1:
另外,我注意到框架是在 XCode Derived Data 文件夹中生成的。有没有可能,框架可以在本地文件夹上生成,这样就可以在GIT上跟踪了?
小智 7
这是在内存中注册字体的方式:
extension UIFont {
private static func registerFont(withName name: String, fileExtension: String) {
let frameworkBundle = Bundle(for: AnyClassFromFramework.self)
let pathForResourceString = frameworkBundle.path(forResource: name, ofType: fileExtension)
let fontData = NSData(contentsOfFile: pathForResourceString!)
let dataProvider = CGDataProvider(data: fontData!)
let fontRef = CGFont(dataProvider!)
var errorRef: Unmanaged<CFError>? = nil
if (CTFontManagerRegisterGraphicsFont(fontRef!, &errorRef) == false) {
print("Error registering font")
}
}
public static func loadFonts() {
registerFont(withName: "Font1", fileExtension: "ttf")
registerFont(withName: "Font2", fileExtension: "ttf")
}
}
Run Code Online (Sandbox Code Playgroud)
调用UIFont.loadFonts()AppDelegate.swift。
之后您应该能够创建您的UIFont(name: "Font1", size: 17).
| 归档时间: |
|
| 查看次数: |
1127 次 |
| 最近记录: |