我需要对(可能很大的)组件执行有效的命中测试,因此我将所有原语表示为NSBezierPath
个实例。到目前为止一切都很好。
现在我无法转换NSString
个对象,特别是反映了它们在视图中的位置:
我正在使用Apple的SpeedometerView示例中的NSString (BezierConversions)
类别将字符串转换为贝塞尔路径。
为字符串创建的bezier路径看起来很棒但是将其定位以匹配视图中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
boundingRectWithSize
答案 0 :(得分:0)
FWIW - 现在工作。
将boundingRectWithSize:options:attributes:
与NSStringDrawingUsesDeviceMetrics
选项一起使用可以提供一些好的文本维度,包括绘制时字符串占用的实际边界框以及第一个字形的偏移量。
抵消bezierWithFont返回的NSBezierPath
:按这个数量计算,你很高兴..