2011-11-02 44 views
1

我正在绘制CGPath内的文本,为了对文本进行命中测试,我正在使用CTFrameGetLineOrigins。以下是文档所述内容:如何确定CGPath的来源?

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

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

  1. 创建我的路径离我进行命中测试的地方很遥远。除了CGPath之外,我需要确保我传递的是CGPoint。丑陋但不是无法克服。
  2. 非矩形形状的起源是什么?圆形CGPath的起源是什么?

回答

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; 
} 
+0

这当然适用于矩形CGPaths。这也适用于其他形状吗?它似乎取决于首先获取左下方的路径元素.. – kubi

+0

我不认为你可以假设任何有关第一个点相对于原始形状的位置,因此您可能需要遍历所有点找到你正在寻找的“角落”。 – Tony