我尝试将NSFont转换为CGFont:
var defaultFont: NSFont = NSFont.labelFont(ofSize: CGFloat(currentSize))
赞:
if let oldFont = defaultFont as? CGFont {...
没有办法,编译器说“ no”:Conditional downcast to CoreFoundation type 'CGFont' will always succeed
。好,让我们尝试不同的方式:
let oldFont = defaultFont as CGFont
不。编译器说“否”:'NSFont' is not convertible to 'CGFont'; did you mean to use 'as!' to force downcast?
。好,让我们使用as!
:
let oldFont = defaultFont as! CGFont
Copmpiler说“是”!,但是运行时错误说:Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
我尝试按名称启动CGFont,但并非所有字体都“挂载在系统中”,如果字体名称由CGFont(_ name:CFString)发起,则字体名称可以从Font-Name
更改为Font_name
。有风险。
有帮助吗?
答案 0 :(得分:2)
来自https://lists.apple.com/archives/cocoa-dev/2010/Feb/msg00177.html:
给出NSFont对象,如何从中提取或创建CGFontRef以直接与CoreGraphics一起使用?
您已经关闭。从(我认为)Leopard,NSFont和CTFontRef(不是CGFontRef)开始是免费的桥接,因此您应该能够使用CTFontCopyGraphicsFont()从NSFont获取CGFontRef。
示例:
import CoreText
let defaultFont: NSFont = ...
let cgFont = CTFontCopyGraphicsFont(defaultFont, nil)