2012-08-29 40 views
5

當使用 - [NSString drawInRect:withAttributes:]時,主要在使用內置的Helvetica Neue而且還使用其他字體時,字距變得非常糟糕。但是,當在文本編輯(使用NSTextView)中呈現相同的字符串時,字距很好。考慮這兩個字符串:當使用 - [NSString drawInRect:withAttributes:]

Bad kerning

Good kerning

對於體積小點,第一種情況下(在可可渲染)幾乎難以辨認,而第二種情況(從文本編輯)要好得多。我認爲這裏沒有使用字距信息。如果我使用值爲0.0的NSKernAttribute(根據文檔關閉字距調整),我會得到相同的結果,即頂部的結果。

我也嘗試使用核心與文本CTLineDraw,但仍然得到了壞字距。所以我的問題是,在Cocoa文本系統中啓用字距調整有什麼特別的需要嗎?如果不是,NSTextView如何應用字距調整?

+0

什麼操作系統,你運行?我的10.7.4沒有區別。對於72pt H.Neue,我確實在10.6.8上看到了2像素的差異,但這仍然比屏幕截圖上的低很多。您確定NSTextView中的默認輸入屬性不包含某些值,您是否嘗試將它發送給'useStandardKerning:'? – hamstergene

+0

這是10.7.4,標準Helvetica Neue(版本7.0d27e1)。第二個截圖來自文本編輯(應用程序),使用新的文檔。 – Aderstedt

+0

選擇全部,格式,字體,克恩,使用默認/無 - 它會改變什麼嗎?我沒有TextEdit和自定義繪製的屬性字符串之間的區別。那麼NSTextFieldCell和NSButtonCell怎麼樣,它們對你來說也不好? – hamstergene

回答

1

頂部的例子是「緊」和底部之一是「鬆散的」看見-[NSTextView tightenKerning]-[NSTextView loosenKerning]。在這裏,蘋果正在混淆地提到其他人稱之爲「追蹤」的東西,例如「柯寧」。在字體中指定的「字符提前」之後,在每個字形之間均勻施加恆定數量的額外空間(正面或負面),以使文字顯得更好,更緊密或更寬鬆。

默認「密封性」或「鬆弛」是渲染引擎的一個屬性,而不是字體,並很容易被不同的OSX的版本,應用程序或用戶界面元件之間不同。

在字體中,字距表用於調整特定字形對所需的字符進度,例如,以我的假設字體:'AV'被列爲字距對 - 'A'應該具有更小當它後面的字符是'V'時前進。

OSX字體Helvetica和HelveticaNeue(以及許多其他字體)根本沒有字距信息,因此您的例子中沒有使用字距調整信息。

如果字體沒有字距信息,你的問題「我怎麼能夠在Cocoa文字系統字距?」沒有意義或不意味着你認爲它的意思(?)。

+0

Helvetica Neue在實際字體中查看'kern'表時確實包含了一個具有98個字距對的字距表。是什麼讓你說它不是? – Aderstedt

+0

你是對的,它確實有一些。我很驚訝,肯定它以前沒有任何。儘管如此,沒有任何相關的例子,對吧?即 - 沒有包含數字的對 – hooleyhoop

+0

是的,大多數對只是負調整。所以,你可能是對的,跟蹤是不同的。我想知道爲什麼10.7和10.8之間的默認跟蹤是如此不同。我的解決方案是讓輸出看起來「擁擠」爲10.7個用戶,並指示那些打擾他的用戶升級到10.8。 – Aderstedt

相關問題