使用CTFont对象作为NSFont对象,桥不工作

时间:2016-09-27 22:52:55

标签: ios macos core-text

我正在尝试将使用NSFont的代码转换为使用CTFont的代码(尝试使其成为macOS和iOS的跨平台)。

根据文档和the PostgresJSONGsonBinding JSON converter I found on jOOQ website帖子,我不应该做任何事情来使它工作,因为CTFontRef和NSFont之间有一个免费的桥梁。

稍后,我收到错误

error: cannot initialize a parameter of type 'NSFont * _Nonnull' with an lvalue of type 'CTFontRef' (aka 'const __CTFont *')
        convertedFont = [fontManager convertFont:convertedFont toNotHaveTrait:NSBoldFontMask];
                                                  ^~~~~~~~~~~~~

旧代码:(暂时保留NSFontManager)

NSFontManager *fontManager = [NSFontManager sharedFontManager];
//            NSFont *font = static_cast<NSFont *>(inProperties[theKey]);
//            NSFontTraitMask fontTraits = [fontManager traitsOfFont:font];
//            NSFont *convertedFont = font;

新代码:

CTFontDescriptorRef descriptor = CTFontDescriptorCreateWithAttributes((CFDictionaryRef)inProperties);
CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, 0, NULL);
CFRelease(descriptor);
CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(font);
CTFontRef convertedFont = font;

1 个答案:

答案 0 :(得分:0)

NSFontCTFont之间的免费网桥意味着以下内容:

给定一个NSFont对象,它可以直接转换为CTFont个对象。

NSFont *fontObj = [NSFont systemFontOfSize:12];
CTFontRef coreFont = (__bridge CTFontRef)(fontObj);

给定一个CTFont对象,它可以直接转换为NSFont对象。

CTFontDescriptorRef descriptor = CTFontDescriptorCreateWithAttributes((CFDictionaryRef)inProperties);
CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, 0, NULL);
CFRelease(descriptor);
NSFont *nsFont = (__bridge NSFont *)(font);

我相信您在代码中所犯的错误并不是将NSFont对象转换为CTFont对象。

如果它能解决问题,请告诉我