我需要对(可能是巨大的)数量的组件执行有效的 HitTest ,因此我将所有原语表示为 NSBezierPath
实例。到目前为止一切进展顺利。
现在我在转换 NSString
对象时遇到问题,特别是反射(reflect)它们在 View 中的位置:
我使用 Apple 的 SpeedometerView 示例中的 NSString (BezierConversions)
类别将字符串转换为贝塞尔曲线路径。
为字符串创建的贝塞尔路径看起来很棒,但将其定位以匹配 View 中 NSString
实例位置的位置不太有效,所以我想这个问题实际上是关于
NSBezierPath
和transformUsingAffineTransform:
与- 应用于 View 的
NSAffineTransform
和NSString drawAtPoint:
的组合
在我的测试项目中,即使是微不足道的情况也会失败:
使用以下方式绘制的字符串的灰色贝塞尔曲线表示:
NSAffineTransform *moveFinal = [NSAffineTransform transform];
[moveFinal translateXBy:x yBy:y];
[textBezier transformUsingAffineTransform:moveFinal];
和紫色字符串通过
[testString drawAtPoint:NSMakePoint(x, y)
withAttributes:attributes];
相同的属性,相同的输入位置,不同的 View 位置。
旋转文本后情况会变得更糟。
更新#1
看起来它归结为
返回的不同边界框NSString sizeWithAttributes:
NSBezierPath 边界
现在正在尝试使用NSString
boundingRectWithSize
最佳答案
FWIW - 正在工作。
将 boundingRectWithSize:options:attributes:
与 NSStringDrawingUsesDeviceMetrics
选项一起使用可以提供一些很好的文本尺寸,包括绘制时字符串占用的实际边界框以及第一个字形的偏移量。
将从 bezierWithFont: 返回的 NSBezierPath
偏移该量,然后就可以开始了..
关于objective-c - NSString 绘图与 String 作为 NSBezierPath 绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9868498/