如何为 CATextLayer() 设置系统字体?
How to set system font for CATextLayer()?
对于UILabel
,我可以设置系统字体为:
label.font = UIFont.systemFontOfSize(18, weight: UIFontWeightMedium)
对于CATextLayer
,是否有类似的方法来设置系统字体而不是直接给出字体名称?
textLayer = CATextLayer()
textLayer.font = ??? // instead of CTFontCreateWithName("HelveticaNeue-Bold", 18, nil)
答案是否定的,但如果你对类型系统字体名称感到厌烦,你可以包装一个简单的函数:
func CTFontCreateSystemFontWithSize(size: CGFloat) -> CTFontRef {
return CTFontCreateWithName(UIFont.systemFontOfSize(1).fontName, size, nil)
}
对于自定义字体,我喜欢这样列举字体系列:
enum MyFontFamily: String {
case Thin = "MyFont-Thin"
case Light = "MyFont-Light"
case Medium = "MyFont-Medium"
case Bold = "MyFont-Bold"
func font (size: CGFloat) -> UIFont? {
return UIFont(name: self.rawValue, size: size)
}
func CTFont (size: CGFloat) -> CTFontRef {
return CTFontCreateWithName(self.rawValue, size, nil)
}
}
用法很简单
textLayer.font = MyFontFamily.Medium.CTFont(18.0)
这对于保持所有内容的强类型很有用,因此您将免费获得自动完成功能并避免拼写错误。
对于UILabel
,我可以设置系统字体为:
label.font = UIFont.systemFontOfSize(18, weight: UIFontWeightMedium)
对于CATextLayer
,是否有类似的方法来设置系统字体而不是直接给出字体名称?
textLayer = CATextLayer()
textLayer.font = ??? // instead of CTFontCreateWithName("HelveticaNeue-Bold", 18, nil)
答案是否定的,但如果你对类型系统字体名称感到厌烦,你可以包装一个简单的函数:
func CTFontCreateSystemFontWithSize(size: CGFloat) -> CTFontRef {
return CTFontCreateWithName(UIFont.systemFontOfSize(1).fontName, size, nil)
}
对于自定义字体,我喜欢这样列举字体系列:
enum MyFontFamily: String {
case Thin = "MyFont-Thin"
case Light = "MyFont-Light"
case Medium = "MyFont-Medium"
case Bold = "MyFont-Bold"
func font (size: CGFloat) -> UIFont? {
return UIFont(name: self.rawValue, size: size)
}
func CTFont (size: CGFloat) -> CTFontRef {
return CTFontCreateWithName(self.rawValue, size, nil)
}
}
用法很简单
textLayer.font = MyFontFamily.Medium.CTFont(18.0)
这对于保持所有内容的强类型很有用,因此您将免费获得自动完成功能并避免拼写错误。