将CATextLayer字体转换为UIFont
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将CATextLayer字体转换为UIFont相关的知识,希望对你有一定的参考价值。
CATextLayer.font
属性是一个不透明的CFTypeRef
。有没有办法将该引用转换为UIFont
?我不介意它是否返回一个可选的UIFont。
答案
我刚写了以下应该处理的扩展:CTFont
,CGFont
,string name或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
是行不通的。
另一答案
你可以这样做,
let font : UIFont = layer.font as! UIFont
希望这可以帮助
以上是关于将CATextLayer字体转换为UIFont的主要内容,如果未能解决你的问题,请参考以下文章