2017-05-31 60 views
2

我想以swift 3以編程方式註冊字體。下面是我用來安裝字體的一段代碼。我試圖安裝的字體是Oswald無法在Swift 3中以編程方式註冊字體

func installFonts(_ fonts: [String]){ 
    for i in 0 ..< fonts.count{ 
     let font = fonts[i].components(separatedBy: ".") 
     let fontPath = Bundle.main.url(forResource: font[0], withExtension: font[1])! 
     var error: Unmanaged<CFError>? 
     if let dataProvider = CGDataProvider(url: fontPath as CFURL) { 
      let font = CGFont(dataProvider) 
      if (!CTFontManagerRegisterGraphicsFont(font, &error)) { 
       print(error.debugDescription) 
      } 
     } 
    } 
} 

無字體的獲取安裝和錯誤描述狀態:

Optional(Swift.Unmanaged<__ObjC.CFError>(_value: Error Domain=com.apple.CoreText.CTFontManagerErrorDomain Code=105 \"Could not register the CGFont \'<CGFont (0x6100000d9f30): Oswald-Bold>\'\" UserInfo={NSDescription=Could not register the CGFont \'<CGFont (0x6100000d9f30): Oswald-Bold>\', CTFailedCGFont=<CGFont (0x6100000d9f30): Oswald-Bold>}))

回答

2

這可能是因爲你的字體是不工作。我嘗試了一些非常類似的東西,它運行良好。

  1. 下載一個TTF字體:http://dl.dafont.com/dl/?f=comicate
  2. 拖入Xcode中,添加到目標
  3. 然以下代碼:

    class ViewController: UIViewController { 
    
    override func viewDidLoad() { 
        super.viewDidLoad() 
        if (installFont("comicate")) { 
         print("Font installed") 
        } 
    } 
    
    @discardableResult 
    func installFont(_ font:String) -> Bool { 
    
        guard let fontUrl = Bundle.main.url(forResource: font, withExtension: "ttf") else { 
         return false 
        } 
    
        let fontData = try! Data(contentsOf: fontUrl) 
    
        if let provider = CGDataProvider.init(data: fontData as CFData) { 
    
         var error: Unmanaged<CFError>? 
    
         let font:CGFont = CGFont(provider) 
         if (!CTFontManagerRegisterGraphicsFont(font, &error)) { 
          print(error.debugDescription) 
          return false 
         } else { 
          return true 
         } 
        } 
        return false 
    } 
    

    }

我在做其實看到「字體安裝」打印。

+0

你是絕對正確的。字體文件有問題 - 奧斯瓦爾德。用我的代碼正確安裝了「COMICATE」字體。 –

+0

爲什麼有些字體不能在iOS上安裝?我從谷歌官方網站下載了這些文件,當我通過plist進行操作時,這些文件似乎可以正常工作。 –

相關問題