-
-
Save howlingblast/4b02ab58cf434c4a6d3cf2f29bda7cca to your computer and use it in GitHub Desktop.
Set global font for iOS app in one place
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// MARK: - Swizzling | |
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) | |
} | |
} | |
// MARK: - New Font Methods | |
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) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment