我尝试将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
copmpiler说“是”!,但运行时错误显示:
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
我尝试按名称初始化cgfont,但并不是所有字体都“安装在系统中”,如果由cgfont初始化,字体名称可以从
Font-Name
更改为Font_name
(名称:cfstring)。这很危险。有什么帮助吗?
最佳答案
从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)
关于swift - 将NSFont转换为CGFont-不可能吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56893842/