gpt4 book ai didi

objective-c - NSString 绘图与 String 作为 NSBezierPath 绘图

转载 作者:行者123 更新时间:2023-12-03 16:47:28 24 4
gpt4 key购买 nike

我需要对(可能是巨大的)数量的组件执行有效的 HitTest ,因此我将所有原语表示为 NSBezierPath 实例。到目前为止一切进展顺利。

现在我在转换 NSString 对象时遇到问题,特别是反射(reflect)它们在 View 中的位置:我使用 Apple 的 SpeedometerView 示例中的 NSString (BezierConversions) 类别将字符串转换为贝塞尔曲线路径。

为字符串创建的贝塞尔路径看起来很棒,但将其定位以匹配 View 中 NSString 实例位置的位置不太有效,所以我想这个问题实际上是关于

  • NSBezierPathtransformUsingAffineTransform:
  • 应用于 View 的 NSAffineTransformNSString drawAtPoint:
  • 的组合

在我的测试项目中,即使是微不足道的情况也会失败:

Purple = NSString drawAtPoint, Grey = NSBezierPath fill

使用以下方式绘制的字符串的灰色贝塞尔曲线表示:

NSAffineTransform *moveFinal = [NSAffineTransform transform];
[moveFinal translateXBy:x yBy:y];
[textBezier transformUsingAffineTransform:moveFinal];

和紫色字符串通过

[testString drawAtPoint:NSMakePoint(x, y)
withAttributes:attributes];

相同的属性,相同的输入位置,不同的 View 位置。
旋转文本后情况会变得更糟。


更新#1

看起来它归结为

返回的不同边界框
  • NSString sizeWithAttributes:
  • NSBezierPath 边界

现在正在尝试使用NSStringboundingRectWithSize

最佳答案

FWIW - 正在工作。

boundingRectWithSize:options:attributes:NSStringDrawingUsesDeviceMetrics 选项一起使用可以提供一些很好的文本尺寸,包括绘制时字符串占用的实际边界框以及第一个字形的偏移量。

将从 bezierWithFont: 返回的 NSBezierPath 偏移该量,然后就可以开始了..

关于objective-c - NSString 绘图与 String 作为 NSBezierPath 绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9868498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com