IOS使用自定義字體的實現(xiàn)

IOS使用自定義字體的實現(xiàn)

前言

其實一直向寫點什么,但工作的忙碌,以及身體的惰性,導致一致沒有機會.最近終于擠出點時間,寫點東西吧,權當放松心情了吧.代碼實現(xiàn)采用Swift3.0

設置字體

系統(tǒng)默認提供的字體主要是指UIFont中提供的字體,其使用代碼為:

tipLabel.font = UIFont(name: "TypeLand YiFeng Scripture", size: 60)

當然這種設置方式是需要配置一些文件的:

  1. 把字體文件拖入到項目中,如圖所示,注意勾選:Copy Items if needed


    字體拖入項目.png
  2. 配置info.Plist文件,添加一項Fonts provided by application,在item 0項的value中填寫字體的PostScript名稱(而非字體文件的文件名,下面會講怎么獲取)

配置info.plist
  1. 查看是否添加成功.在項目中的viewDidload中加入測試代碼,如下:
override func viewDidLoad() {
        super.viewDidLoad()
        //獲取所有字體名稱及家族名
        print(UIFont.familyNames)
    }

輸出如下:

輸出結果.png

Tips:

  • 這種方法只能通過眼力去尋找你剛才添加的字體,其實還可以使用Mac自帶的字體冊應用查看.(后面介紹)
  1. 成功后來測試下字體吧.
    private func demo() {
//        系統(tǒng)默認提供的字體主要是指UIFont中提供的字體,其使用代碼為:
        view.addSubview(tipLabel)
        tipLabel.font = UIFont(name: "TypeLand YiFeng Scripture", size: 60)
    }

    private lazy var tipLabel : UILabel = {
        let lab = UILabel()
        lab.textAlignment = .center
        lab.textColor = UIColor.blue
        lab.text = "IOS Custom字體Demo"
        lab.bounds = self.view.bounds
        lab.center = self.view.center
        lab.numberOfLines = 0
        return lab
    }()

運行模擬器,結果如下:

模擬器
  • 在xib/sb中也可以實現(xiàn)選擇.
xib

字體冊獲取字體的PostScript名稱

  1. 打開Launchpad --> 其它 --> 字體冊,然后打開
字體冊
  1. 打開后,點擊工具欄中的+,加入自定義字體.
點擊加號
添加字體
  1. 然后選中字體,右鍵,選中驗證字體
驗證字體
  1. 在驗證字體界面展開字體,后就可以得到字體的PostScript名稱了.
PostScript

動態(tài)獲取字體并設置的解決辦法

但是一般來說,字體文件比較大,不該內置,而且如果都用plist預定義的方式,那肯定就沒法覆蓋全,導致用戶不能使用更多自己喜歡的字體。所以應該用代碼讀取字體的方式:

  • 提供字體文件路徑,返回所需要字體:
    /// 根據字體路徑,大小返回字體對象
    ///
    /// - Parameters:
    ///   - path: 字體路徑
    ///   - size: 字體大小
    /// - Returns: UIFont對象
    private func customFont(with path: String , size: CGFloat) -> UIFont {
        let fontUrl = URL(fileURLWithPath: path)
        let fontData = CGDataProvider(url: fontUrl as CFURL)
        let fontRef = CGFont(fontData!)
        CTFontManagerRegisterGraphicsFont(fontRef, nil)
        let fontName = fontRef.postScriptName as! String
        let font = UIFont(name: fontName, size: size)
        return font!
    }

  • 使用時則直接調用
private func demo() {
//        系統(tǒng)默認提供的字體主要是指UIFont中提供的字體,其使用代碼為:
        view.addSubview(tipLabel)
//        tipLabel.font = UIFont(name: "TypeLand YiFeng Scripture", size: 60)
        let path = Bundle.main.path(forResource: "TpldYiFengScripture.otf", ofType: nil)
        //獲取字體
        tipLabel.font = customFont(with: path!, size: 50)
        
    }

則一樣能正常顯示.

Tip: 方法內部,多處強制解包,和類型轉換,應該guard守護下(若傳入路徑為錯誤的路徑,則會崩潰.應當注意),當然倉促之間,有錯誤的話,歡迎指出,一起討論.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,893評論 25 709
  • 本文已遷移至掘金:https://juejin.im/post/5a3214f36fb9a0451238f744 ...
    EyreFree閱讀 5,356評論 3 14
  • 耳邊輕柔音樂總有憶的花株喚某名時刻涌動的情緒,近乎木訥拙劣的筆觸和所累積的詩情混淆,深美麻木勒索猖狂時間,隱沒在靜...
    洛桑爾靜閱讀 243評論 0 2
  • 嚴防死守的情緒 終一瞬決堤 所有關于你 絲絲縷縷 如蟻穴來襲 是誰 做足了功課 在我的骨子里 不提
    微雨憑欄閱讀 226評論 0 1

友情鏈接更多精彩內容