我需要对(可能巨大的)数量的组件执行高效的命中测试,因此我已将所有基元表示为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