将NSFont转换为CGFont-不可能吗?

时间:2019-07-04 20:15:12

标签: swift cocoa core-text

我尝试将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 。有风险。

有帮助吗?

1 个答案:

答案 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)