如何确定CGPath的来源?

时间:2011-11-02 18:52:53

标签: core-graphics core-foundation core-text cgpath ctframe

我在CGPath内绘制文字,为了对文字进行点击测试,我正在使用CTFrameGetLineOrigins。这是文档所说的内容:

  

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

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

  1. 我的路径创建距离我正在进行热门测试的地方相当远。我需要确保除了CGPoint之外我还要经过CGPath。丑陋,但并非不可克服。
  2. 非矩形的形状的原点是什么?圆形CGPath的起源是什么?

1 个答案:

答案 0 :(得分: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;
}