我尝试将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/

10-09 12:42