2011-11-02 43 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