gpt4 book ai didi

ios - 我可以在包中嵌入自定义字体并从 ios 框架访问它吗?

转载 作者:IT王子 更新时间:2023-10-29 07:58:45 26 4
gpt4 key购买 nike

我正在创建一个 ios 框架,它的用于打包资源( Nib 、图像、字体),我正在尝试嵌入一个自定义字体 在 bundle 中,但我无法从框架加载它,这可能吗?

1) 我可以用这个来本地化字体文件:对象
NSString *fontPath = [[NSBundle frameworkBundle] pathForResource:@"MyCustomFont"ofType:@"ttf"];
2)但我无法在我的字体列表中找到它:对象
NSArray * array = [UIFont familyNames];
我将我的字体名称包含在带有“应用程序提供的字体”的包的 plist 中,但没有成功,我也在应用程序信息 plist 中尝试过,将它包含在框架资源中但没有成功。

我可以从包中加载 Nib 和图像(通过包的名称作为前缀)但不能加载字体。有什么想法吗?

编辑: 我看到了以下帖子:Can I embed a custom font in an iPhone application? ,但问题只是“我可以在 iPhone 应用程序中嵌入自定义字体吗?”而不是“我可以在外部框架/包中嵌入自定义字体吗?”它还引用了一个有趣的动态加载,但它使用的是私有(private) api,这不是框架可用的解决方案。

谢谢

最佳答案

swift 3:

首先,不要从带有附加路径组件的 main 访问框架包...从它的标识符实例化它。您可以获得这样的字体 URL:

static func fontsURLs() -> [URL] {
let bundle = Bundle(identifier: "com.company.project.framework")!
let fileNames = ["Roboto-Bold", "Roboto-Italic", "Roboto-Regular"]
return fileNames.map({ bundle.url(forResource: $0, withExtension: "ttf")! })
}

而且我发现使用 UIFont 扩展名来注册字体很不错:

public extension UIFont {
public static func register(from url: URL) throws {
guard let fontDataProvider = CGDataProvider(url: url as CFURL) else {
throw SVError.internal("Could not create font data provider for \(url).")
}
let font = CGFont(fontDataProvider)
var error: Unmanaged<CFError>?
guard CTFontManagerRegisterGraphicsFont(font, &error) else {
throw error!.takeUnretainedValue()
}
}
}

现在享受注册:

do {
try fontsURLs().forEach({ try UIFont.register(from: $0) })
} catch {
print(error)
}

关于ios - 我可以在包中嵌入自定义字体并从 ios 框架访问它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14735522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com