0

我正在尝试注册从 UIDocument 获取的字体,一切正常

I enabled Install Fonts capability under the Signing & CapabilitiesI accessed the UIDocument file and I pick the font.我不知道如何注册。

这是我的代码

@objc func didPressButton(_ sender: UIButton) {
    let documentPicker: UIDocumentPickerViewController = UIDocumentPickerViewController(documentTypes: ["public.truetype-ttf-font", "public.opentype-font"], in: UIDocumentPickerMode.import)
     documentPicker.delegate = self
    self.present(documentPicker, animated: true, completion: nil)
}

// MARK: - UIDocumentPickerDelegate Methods
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {

    let fontUrl = Bundle(for: type(of : self)).path(forResource: "\(urls[0].path)", ofType: nil)
   CTFontManagerRegisterFontURLs([fontUrl] as CFArray, .persistent, true) { (errors, done) -> Bool in
       if(done) {
           print("Done")
       }
       print(errors as Array)
    for family in UIFont.familyNames.sorted() {
        let names = UIFont.fontNames(forFamilyName: family)
        print("Family: \(family) Font names: \(names)")
    }

       return true
   }
}

 func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
    controller.dismiss(animated: true, completion: nil)
}
4

1 回答 1

0

我终于想通了,这是其他人寻找解决方案的答案。

 @objc func didPressButton(_ sender: UIButton) {
        let documentPicker: UIDocumentPickerViewController = UIDocumentPickerViewController(documentTypes: ["public.truetype-ttf-font", "public.opentype-font"], in: UIDocumentPickerMode.import)
         documentPicker.delegate = self
        self.present(documentPicker, animated: true, completion: nil)
    }

    // MARK: - UIDocumentPickerDelegate Methods
    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {

       self.handleFileSelection(inUrl: urls.first!)

    }

     func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
        controller.dismiss(animated: true, completion: nil)
    }



    private func handleFileSelection(inUrl:URL) -> Void {
        do {
         // inUrl is the document's URL
            let fontData = try Data(contentsOf: inUrl) // Getting file data here
            let dataProvider = CGDataProvider(data: fontData as CFData)
            let cgFont = CGFont(dataProvider!)

                var error: Unmanaged<CFError>?
            if !CTFontManagerRegisterGraphicsFont(cgFont!, &error)
                {
                    print("Error loading Font!")
                } else {

                let fontName = cgFont!.postScriptName

                self.lab.font = UIFont(name: String(fontName!), size: 30)
                for family in UIFont.familyNames.sorted() {
                    let names = UIFont.fontNames(forFamilyName: family)
                    print("Family: \(family) Font names: \(names)")
                }
            }

        } catch {
            print("document loading error")
        }
    }
于 2020-02-15T19:07:06.260 回答