我需要對(可能巨大的)數量的組件執行高效的命中測試,因此我已將所有基元表示爲NSBezierPath
實例。迄今爲止所有的工作都很棒NSString繪圖與字符串作爲NSBezierPath繪圖
現在我無法轉換NSString
物體,特別是反映了他們在視圖中的位置: 我使用蘋果的SpeedometerView例如NSString (BezierConversions)
類別字符串轉換成貝塞爾路徑。
字符串創建的貝塞爾曲線看起來很大,但它定位匹配在視圖中NSString
實例場所的位置完全不是那麼回事,所以我想這個問題實際上是關於
NSBezierPath
和transformUsingAffineTransform:
VS 。- 應用的
NSAffineTransform
組合到一個視圖和NSString drawAtPoint:
在我的測試項目,甚至瑣碎的情況下失敗:串的
灰色貝塞爾表示使用得出:
NSAffineTransform *moveFinal = [NSAffineTransform transform];
[moveFinal translateXBy:x yBy:y];
[textBezier transformUsingAffineTransform:moveFinal];
和經由
[testString drawAtPoint:NSMakePoint(x, y)
withAttributes:attributes];
相同的屬性,相同的輸入的位置,不同的位置在視紫字符串。
它旋轉的文字變得更糟。
更新#1
看起來像它的熬煮返回不同的邊框由
NSString sizeWithAttributes:
NSBezierPath bounds
現在用NSString
試驗博undingRectWithSize
繪製的邊界是不一樣的文字的大小。例如,一個大的羅馬斜體* f *將遠遠落後於'NSAttributedString size'返回的框的邊界。 – hamstergene 2012-03-27 07:01:07
是的,這就是爲什麼我切換到'boundingRectWithSize'。關於各種字體維度的好介紹可以在這裏找到(https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/FontHandling/Tasks/GettingFontMetrics。html)其中sizeWithAttributes似乎使用外邊界框和'NSBezierPath bounds'這些字形佔用的實際區域。 – Jay 2012-03-27 07:02:41