首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swift中将UIFont对象转换为CTFont

如何在Swift中将UIFont对象转换为CTFont
EN

Stack Overflow用户
提问于 2014-06-27 16:40:52
回答 2查看 4.5K关注 0票数 13

我正在尝试将一些使用UIFontCTFont的代码移植到Swift,并且(在Objective中成功地)使用简单的桥接转换从一个转换到另一个,反之亦然。

例如,考虑以下代码(在UIFontDescriptor类别中):

代码语言:javascript
复制
UIFont *font = [UIFont fontWithDescriptor:self size:0.0];
NSArray *features = CFBridgingRelease(CTFontCopyFeatures((__bridge CTFontRef)font));

我还没有弄清楚如何用Swift来表达这一点,这样才能真正编译。至少以下几点没有:

代码语言:javascript
复制
let font = UIFont(descriptor:self, size: 0.0)
let features = CTFontCopyFeatures(font as CTFont)

错误:“UIFont”不能转换为“CTFont”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-07 14:11:57

显然,这已经在Swift和/或CoreText的后期版本中得到了修正。至少现在它在我使用Xcode 7.0.1的测试中起作用了。

票数 2
EN

Stack Overflow用户

发布于 2014-06-27 17:03:09

尝尝这个。你不能只是强迫从一种类型到另一种类型的值。但是,如果您从描述符和大小创建了一个CTFont,那么即使您没有包含用于转换的矩阵( nil参数),它似乎也为您提供了一个有效的数组。

代码语言:javascript
复制
let font = CTFontCreateWithFontDescriptor(descriptor, 0.0, nil)
let features: NSArray = CTFontCopyFeatures(font)

至于创建CTFontDescriptor,我会根据最初给出的内容使用CTFontDescriptorCreateWithNameAndSizeCTFontDescriptorCreateWithAttributes。后者采用一个简单的NSDictionary,前者只使用字体名称和大小。

要从现有字体(称为originalFont)开始,只需执行以下操作即可获得描述符:

代码语言:javascript
复制
let font = CTFontCreateWithName(originalFont.fontName as CFStringRef, 
    originalFont.pointSize as CGFloat, nil)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24456863

复制
相关文章

相似问题

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