1

内にテキストを描画しています。CGPathテキストのヒットテストを行うために、を使用していCTFrameGetLineOriginsます。ドキュメントの内容は次のとおりです。

各CGPointは、フレームのパスの原点を基準にして、CTFrameGetLinesによって返される線の配列内の対応する線の原点です。

フレームのパスの原点を見つけるにはどうすればよいですか?例私が見つけたのは、パスが最初に作成されたときに、パスの起点をすべて保存することです。これには2つの問題があります。

  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 に答える