Как зарегистрировать шрифт, который был взят из UIDocument - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь зарегистрировать шрифт, который был получен из UIDocument, все отлично работает

I enabled Install Fonts capability under the Signing & Capabilities и I 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)
}

1 Ответ

0 голосов
/ 15 февраля 2020

Я наконец понял это, и это ответ для других людей, которые ищут решение.

 @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")
        }
    }
...