CATextLayer.font
属性是不透明的CFTypeRef
。有没有办法将该引用转换为UIFont
?我不介意它是否返回一个可选的UIFont。
答案 0 :(得分:1)
我刚写了以下应该处理的扩展程序:CTFont
,CGFont
,字符串名称或UIFont
:
extension CATextLayer {
public var typeFace:UIFont? {
let name:String
switch font {
case let ctFont as CTFont :
// If you assign a UIFont to CATextLayer.font
// it is implicitly converted to CTFont,
// so this case will be called.
guard let _name = CTFontCopyName(ctFont, kCTFontPostScriptNameKey) else {
return nil
}
name = _name as NSString as String
case let cgFont as CGFont :
guard let _name = cgFont.postScriptName else {
return nil
}
name = _name as NSString as String
case let string as NSString :
name = string as String
case let string as String :
name = string
default:
return nil
}
return UIFont(name:name, size:fontSize)
}
}
在旁注中,我发现文档中的评论不准确:
在iOS中,您无法将UIFont对象分配给此属性。
根据我的测试,我可以在UIFont
上设置CATextLayer.font
,但似乎工作正常。
修改
当您将UIFont
分配给CATextLayer.font
时,它会在幕后转换为CTFont
,因此为了让UIFont
退出,这是必要的从CTFont
转换为UIFont
(我的代码所做的)。简单地转换为UIFont
是行不通的。
答案 1 :(得分:0)
你可以这样做,
let font : UIFont = layer.font as! UIFont
希望这有帮助