Как определить происхождение CGPath? - PullRequest
1 голос
/ 02 ноября 2011

Я рисую текст в пределах CGPath, чтобы выполнить тестирование по тексту, я использую CTFrameGetLineOrigins. Вот что говорится в документации:

Каждый CGPoint является источником соответствующей строки в массиве строк, возвращаемых CTFrameGetLines, относительно источника пути фрейма.

Как мне найти источник пути кадра? Все примеры, которые я нашел, сохраняют источник пути при его первоначальном создании. У меня есть две проблемы с этим:

  1. Создание моего пути довольно далеко от места, где я делаю тестирование удара. Мне нужно убедиться, что я обгоняю CGPoint в дополнение к CGPath. Уродливый, но не непреодолимый.
  2. Каково происхождение фигуры, которая не является прямоугольной? Каково происхождение кругового CGPath?

1 Ответ

0 голосов
/ 02 ноября 2011

Вы можете использовать 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;
}
...