2
我正在尝试动态下载我的应用的字体,因为我经常想要随时添加新的字体,并且不希望每次都重新提交我的应用。iOS - 下载动态字体
我跟了一些其他的导游试图从一个URL下载的字体文件,保存到应用程序的文件目录,然后使用CGFontCreateWithDataProvider & CTFontManagerRegisterGraphicsFont加载它。
但是,应用程序可以使失败的“将writeToFile”功能,并吐出了这行:
println("Failed to save font: \(fontFile)")
我已经验证了“fontUrl”是有效的(复制件和调试粘贴送到我桌面浏览器)。
而且,这里是什么 '的FontPath' 的值结束了在调试器是和它的权利在我看来:
fontPath = "/Users/James/Library/Developer/CoreSimulator/Devices/E153E1F4-E3FD-4BCE-A40F-433EADF14591/data/Containers/Data/Application/969A248C-A7B3-4768-86E4-68A6C4E20ECF/Documents/Fonts/american_typewriter_medium_bt.ttf"
代码:
// Download and save font file
let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) {
if paths.count > 0 {
if let documentsDirectory = paths[0] as? String {
let fontPath = documentsDirectory.stringByAppendingPathComponent("Fonts/"+fontFile) as String
let fontUrl = NSURL(string: ApiUrlString + "fonts/" + fontFile)
if let fontData = NSData(contentsOfURL: fontUrl!)
{
if(!fontData.writeToFile(fontPath, atomically: true))
{
println("Failed to save font: \(fontFile)")
return
}
}
else
{
println("Failed to download font from URL: \(fontUrl)")
return
}
// Load Font
let data: NSData? = NSFileManager.defaultManager().contentsAtPath(fontPath)
if (data == nil)
{
println("Failed to load saved font: \(fontFile)")
return
}
var error: Unmanaged<CFError>?
let provider: CGDataProviderRef = CGDataProviderCreateWithCFData(data)
let font: CGFontRef = CGFontCreateWithDataProvider(provider)
if (!CTFontManagerRegisterGraphicsFont(font, &error))
{
println("Failed to register font, error: \(error)")
return
}
println("Successfully saved and registered font: \(fontFile)")
}
}
}
else
{
println("Failed to load documents directory: \(fontFile)")
}
你在哪里声明了var fontFile? – 2014-12-06 06:53:13