1

我在 a 中绘制文本CGPath,为了对文本进行命中测试,我正在使用CTFrameGetLineOrigins. 这是文档中的内容:

每个 CGPoint 是 CTFrameGetLines 返回的行数组中相应行的原点,相对于帧路径的原点。

我将如何寻找框架路径的原点?我发现的示例都在最初创建路径时保存了路径的原点。我有两个问题:

  1. 我的路径的创建与我进行命中测试的地方相距甚远。我需要确保CGPoint除了CGPath. 丑陋,但并非不可逾越。
  2. 不是矩形的形状的原点是什么?圆形 CGPath 的起源是什么?
4

1 回答 1

0

您可以使用CGPathApply检查完整路径:

typedef struct {
  CGPoint origin;
  BOOL found;
} MySearchData;

void MyApplierFunction (void* info, const CGPathElement* element) {
  MySearchData* searchData = (MySearchData *) info;
  if (! searchData->found) {
    searchData->origin = element->points[0];
    searchData->found = YES;
  }
}

CGPoint GetPathOrigin (CGPathRef path) {
  MySearchData searchData = { CGPointZero, NO };
  CGPathApply(path, (void *) &searchData, &MyApplierFunction);
  return searchData.origin;
}
于 2011-11-02T19:34:31.313 回答