将 NSFont 转换为 CGFont——不可能?
Casting NSFont to CGFont — impossible?
我尝试将 NSFont 转换为 CGFont:
var defaultFont: NSFont = NSFont.labelFont(ofSize: CGFloat(currentSize))
像这样:
if let oldFont = defaultFont as? CGFont {...
没办法,编译器说“不”: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
Comppiler 说“是”!但是运行时错误说:Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
我尝试按名称启动 CGFont,但并非我所有的字体都是 "mounted in system",如果字体名称由 CGFont(_ name:CFString).有风险。
有什么帮助吗?
来自https://lists.apple.com/archives/cocoa-dev/2010/Feb/msg00177.html:
Given an NSFont object how can I extract or create a CGFontRef from it to use directly with CoreGraphics?
你很接近。从(我认为)Leopard 开始,NSFont 和 CTFontRef(不是 CGFontRef)是 toll-free 桥接的,因此您应该能够使用 CTFontCopyGraphicsFont() 从 NSFont 获取 CGFontRef。
示例:
import CoreText
let defaultFont: NSFont = ...
let cgFont = CTFontCopyGraphicsFont(defaultFont, nil)
我尝试将 NSFont 转换为 CGFont:
var defaultFont: NSFont = NSFont.labelFont(ofSize: CGFloat(currentSize))
像这样:
if let oldFont = defaultFont as? CGFont {...
没办法,编译器说“不”: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
Comppiler 说“是”!但是运行时错误说:Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
我尝试按名称启动 CGFont,但并非我所有的字体都是 "mounted in system",如果字体名称由 CGFont(_ name:CFString).有风险。
有什么帮助吗?
来自https://lists.apple.com/archives/cocoa-dev/2010/Feb/msg00177.html:
Given an NSFont object how can I extract or create a CGFontRef from it to use directly with CoreGraphics?
你很接近。从(我认为)Leopard 开始,NSFont 和 CTFontRef(不是 CGFontRef)是 toll-free 桥接的,因此您应该能够使用 CTFontCopyGraphicsFont() 从 NSFont 获取 CGFontRef。
示例:
import CoreText
let defaultFont: NSFont = ...
let cgFont = CTFontCopyGraphicsFont(defaultFont, nil)