Skip to content

Instantly share code, notes, and snippets.

@hectorddmx
Forked from feighter09/Fonts.swift
Created April 23, 2018 04:58
Show Gist options
  • Select an option

  • Save hectorddmx/4f70b6f29b25a25fcb8c17e8fdc80244 to your computer and use it in GitHub Desktop.

Select an option

Save hectorddmx/4f70b6f29b25a25fcb8c17e8fdc80244 to your computer and use it in GitHub Desktop.

Revisions

  1. @feighter09 feighter09 revised this gist Aug 16, 2015. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions Fonts.swift
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,4 @@
    // MARK: - Swizzling
    extension UIFont {
    class var defaultFontFamily: String { return "Georgia" }

    @@ -28,6 +29,7 @@ extension UIFont {
    }
    }

    // MARK: - New Font Methods
    extension UIFont {
    private class func myPreferredFontForTextStyle(style: String) -> UIFont
    {
  2. @feighter09 feighter09 created this gist Aug 16, 2015.
    59 changes: 59 additions & 0 deletions Fonts.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,59 @@
    extension UIFont {
    class var defaultFontFamily: String { return "Georgia" }

    override public class func initialize()
    {
    if self == UIFont.self {
    swizzleSystemFont()
    }
    }

    private class func swizzleSystemFont()
    {
    let systemPreferredFontMethod = class_getClassMethod(self, "preferredFontForTextStyle:")
    let mySystemPreferredFontMethod = class_getClassMethod(self, "myPreferredFontForTextStyle:")
    method_exchangeImplementations(systemPreferredFontMethod, mySystemPreferredFontMethod)

    let systemFontMethod = class_getClassMethod(self, "systemFontOfSize:")
    let mySystemFontMethod = class_getClassMethod(self, "mySystemFontOfSize:")
    method_exchangeImplementations(systemFontMethod, mySystemFontMethod)

    let boldSystemFontMethod = class_getClassMethod(self, "boldSystemFontOfSize:")
    let myBoldSystemFontMethod = class_getClassMethod(self, "myBoldSystemFontOfSize:")
    method_exchangeImplementations(boldSystemFontMethod, myBoldSystemFontMethod)

    let italicSystemFontMethod = class_getClassMethod(self, "italicSystemFontOfSize:")
    let myItalicSystemFontMethod = class_getClassMethod(self, "myItalicSystemFontOfSize:")
    method_exchangeImplementations(italicSystemFontMethod, myItalicSystemFontMethod)
    }
    }

    extension UIFont {
    private class func myPreferredFontForTextStyle(style: String) -> UIFont
    {
    let defaultFont = myPreferredFontForTextStyle(style) // will not cause stack overflow - this is now the old, default UIFont.preferredFontForTextStyle
    let newDescriptor = defaultFont.fontDescriptor().fontDescriptorWithFamily(defaultFontFamily)
    return UIFont(descriptor: newDescriptor, size: defaultFont.pointSize)
    }

    private class func mySystemFontOfSize(fontSize: CGFloat) -> UIFont
    {
    return myDefaultFontOfSize(fontSize)
    }

    private class func myBoldSystemFontOfSize(fontSize: CGFloat) -> UIFont
    {
    return myDefaultFontOfSize(fontSize, withTraits: .TraitBold)
    }

    private class func myItalicSystemFontOfSize(fontSize: CGFloat) -> UIFont
    {
    return myDefaultFontOfSize(fontSize, withTraits: .TraitItalic)
    }

    private class func myDefaultFontOfSize(fontSize: CGFloat, withTraits traits: UIFontDescriptorSymbolicTraits = []) -> UIFont
    {
    let descriptor = UIFontDescriptor(name: defaultFontFamily, size: fontSize).fontDescriptorWithSymbolicTraits(traits)
    return UIFont(descriptor: descriptor, size: fontSize)
    }
    }