首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >把NSFont传给CGFont -不可能吗?

把NSFont传给CGFont -不可能吗?
EN

Stack Overflow用户
提问于 2019-07-04 20:15:12
回答 1查看 459关注 0票数 1

我尝试将NSFont转换为CGFont:

代码语言:javascript
复制
 var defaultFont: NSFont = NSFont.labelFont(ofSize: CGFloat(currentSize))

如下所示:

代码语言:javascript
复制
 if let oldFont = defaultFont as? CGFont {...

不可能,编译器说“不”:Conditional downcast to CoreFoundation type 'CGFont' will always succeed。好吧,让我们试试不同的方法:

代码语言:javascript
复制
 let oldFont = defaultFont as CGFont

不是的。编译器说“不”:'NSFont' is not convertible to 'CGFont'; did you mean to use 'as!' to force downcast?。好的,让我们使用as!

代码语言:javascript
复制
 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。这很冒险。

有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-04 20:23:27

来自https://lists.apple.com/archives/cocoa-dev/2010/Feb/msg00177.html

给定一个NSFont对象,如何从它提取或创建一个CGFontRef以直接与CoreGraphics一起使用?你离我很近。从(我认为) Leopard开始,NSFont和CTFontRef (而不是CGFontRef)是免费的桥接,所以您应该能够使用CTFontCopyGraphicsFont()从NSFont获得CGFontRef。

示例:

代码语言:javascript
复制
import CoreText

let defaultFont: NSFont = ...
let cgFont = CTFontCopyGraphicsFont(defaultFont, nil)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56893842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档