我需要针对(可能是巨大的)数量的组件执行有效的命中测试,因此我将所有原语表示为NSBezierPath
实例。到目前为止一切都很好。
现在我在转换NSString
对象时遇到了麻烦,特别是在视图中反映它们的位置:我正在使用NSString (BezierConversions)
Apple 的 SpeedometerView 示例中的类别将字符串转换为贝塞尔路径。
为字符串创建的贝塞尔路径看起来很棒,但是将其定位为NSString
与视图中实例位置的位置相匹配并不完全有效,所以我想这个问题真的是关于
NSBezierPath
和transformUsingAffineTransform:
对比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
boundingRectWithSize