2012-02-28 85 views
4

我正在使用CoreText在Mac/iOS跨平臺代碼中繪製一些文本。我可能使用的操作系統中沒有爲所有用戶安裝真正的「斜體」版本的字體,但他們需要知道文本是斜體。什麼是CoreText等同於AppKit的NSObliquenessAttributeName?

使用AppKit的NSAttributedString -drawAtPoint :,我可以使用NSObliquenessAttributeName使文本傾斜(並因此看起來斜體 - 好,斜)。 CoreText似乎沒有這個屬性的等價物。至少我在CTStringAttributes.h中找不到任何文檔(不是在CoreText發佈幾年後還沒有任何文檔)。

有誰知道如何在iOS上使用CoreText獲得斜文本?

+0

Core Text的文檔?你是這個意思? https://developer.apple.com/library/ios/documentation/Carbon/Reference/CoreText_Framework_Ref/ – 2012-02-28 17:34:44

+0

我在Mac開發中心點擊了「Reference」,在搜索框中輸入了CoreText,我得到的只有三個示例應用程序。你如何取出這些祕密文件? – uliwitness 2012-02-28 18:09:57

+0

這是https://developer.apple.com/library/mac/search/?q=core+text上的頂級參考資料。 – 2012-02-28 18:29:11

回答

1

顯示斜體字體沒有斜體字體通常是一個壞主意。但是,我可以理解,有些情況下必須強制執行。

,自己目前在我腦海中唯一的解決方案是創建一個剪切字體矩陣自定義字體:

CGAffineTransform matrix = CGAffineTransformMake(1, tan(degreesToRadians(0)), tan(degreesToRadians(20)), 1, 0, 0); 
CTFontRef myfont = CTFontCreateWithName(CFSTR("Helvetica"), 48, &matrix); 

你必須與矩陣玩,看看帶來最好的結果。 (請不認爲這是一個假的代碼混合了我的頭和網絡連接。)

+1

我想你想要一個剪切矩陣而不是旋轉矩陣。 – alastair 2012-02-28 17:54:35

+1

謝謝,我會嘗試,與阿拉斯泰爾的糾正。我很高興不必顯示人造斜體,但它是用來做這件事的預先存在的數據,而且我不能只放棄以前用於顯示正確的信息。 :-) – uliwitness 2012-02-28 18:03:48

+1

是的,傾斜矩陣就是你想要的。 – 2012-02-28 18:11:11

1

沒有試過,但根據iOS Programming Pushing The Limits,路過kCTFontItalicTraitCTFontCreateCopyWithSymbolicTraits會選擇真正的斜體(如果可用)和傾斜,否則。還有kCTFontSlantTrait手動小數傾斜角度可達30度。

+0

據我所知,這隻適用於實際上以斜體變體爲特徵的字體。我理解這個問題,就好像OP想用不帶斜體的字體顯示斜體一樣。 – 2012-02-28 17:42:05

+0

我試過kCTFontSlantTrait,這沒有幫助(我感覺這是一個只讀屬性)。在Courier這樣的情況下,斜體字體採用傾斜的字體,實際上它帶有一個預先構建的斜向變體,但我需要顯示的一些字體甚至沒有。 – uliwitness 2012-02-28 17:51:48

8

我會嘗試使用仿射變換參數CTFontCreateWithName(),剪切矩陣。例如

CGAffineTransform matrix = { 1, 0, 0.5, 1, 0, 0 }; 
CTFontRef myFont = CTFontCreateWithName(CFSTR("Helvetica"), 48, &matrix); 

這會產生一個相當大的偏差(假設我的判斷正確),但你明白了。

更新:

事實上,the documentation appears to imply that this is the right way to do things

+0

很好的答案,但請不要讓我必須看這個。 – hooleyhoop 2012-02-28 20:05:36

相關問題