gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:37:49 24 4
gpt4 key购买 nike

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

例如,考虑这段代码(在 UIFontDescriptor 类别中):

UIFont *font = [UIFont fontWithDescriptor:self size:0.0];
NSArray *features = CFBridgingRelease(CTFontCopyFeatures((__bridge CTFontRef)font));

我还没有弄清楚如何以实际编译的方式在 Swift 中表达它。以下至少不会:

let font = UIFont(descriptor:self, size: 0.0)
let features = CTFontCopyFeatures(font as CTFont)

错误:“UIFont”无法转换为“CTFont”

最佳答案

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

let font = CTFontCreateWithFontDescriptor(descriptor, 0.0, nil)
let features: NSArray = CTFontCopyFeatures(font)

至于创建 CTFontDescriptor,我会使用 CTFontDescriptorCreateWithNameAndSizeCTFontDescriptorCreateWithAttributes,具体取决于您最初提供的内容。后者采用简单的 NSDictionary,而前者仅使用字体名称和大小。

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

let font = CTFontCreateWithName(originalFont.fontName as CFStringRef, 
originalFont.pointSize as CGFloat, nil)

关于uikit - 如何在 Swift 中将 UIFont 对象转换为 CTFont,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com