2016-09-27 66 views
0

我想將使用NSFont的代碼轉換爲使用CTFont的代碼(試圖使它成爲跨平臺的macOS和iOS)。使用CTFont對象作爲NSFont對象,橋不工作

根據文檔和this後,我不應該做任何事情,使其工作,因爲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]; 
                ^~~~~~~~~~~~~ 

OLD CODE:(保持NSFontManager現在)

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

NEW CODE:

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

請檢查我的答案,讓我知道它是否解決您的問題 – KrishnaCA

回答

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對象。

請讓我知道這是否解決了問題