我試圖通過CGPathRefs將文本分成所有不同的部分。例如,L有一條路徑和?有兩個(點和其他)。將CGPathRef拆分爲多個路徑
目前,我可以將每個字母作爲路徑,但是在「?」的示例中,該路徑包含點和其餘的一個。我想分割它們,但我似乎無法使它起作用。
爲了將文本分成路徑,我使用了堆棧溢出的一些答案,它運行良好,這裏是我將每個字母作爲路徑的部分。在這裏,我也通過「CGPathApply」功能運行它看每一個人的一點
CGPathRef letter = CTFontCreatePathForGlyph(runFont, glyph, NULL);
NSMutableArray *pathElements = [NSMutableArray array];
CGPathApply(letter, (__bridge void * _Nullable)(pathElements), getPointsFromBezier);
然後我看每一個點在getPointsFromBezier
這樣的:
void getPointsFromBezier(void *info, const CGPathElement *element){
CGPoint *p = element->points;
NSString *name;
switch (element->type) {
case kCGPathElementMoveToPoint: name = @"kCGPathElementMoveToPoint"; break;
case kCGPathElementAddLineToPoint: name = @"kCGPathElementAddLineToPoint"; break;
case kCGPathElementAddQuadCurveToPoint: name = @"kCGPathElementAddQuadCurveToPoint"; break;
case kCGPathElementAddCurveToPoint: name = @"kCGPathElementAddCurveToPoint"; break;
case kCGPathElementCloseSubpath: name = @"kCGPathElementCloseSubpath"; break;
default: name = @"default"; break;
}
NSLog(@"Type: %@ || Point: %@", name, NSStringFromCGPoint(*p));
}
這給我的輸出是這樣的:
Type: kCGPathElementMoveToPoint || Point: {11.75, 0}
Type: kCGPathElementAddLineToPoint || Point: {11.75, 9.729}
Type: kCGPathElementAddQuadCurveToPoint || Point: {11.75, 11.26}
..
..
Type: kCGPathElementAddQuadCurveToPoint || Point: {13.00, 10.52}
Type: kCGPathElementAddLineToPoint || Point: {13.00, 0}
Type: kCGPathElementCloseSubpath || Point: {13.00, 0}
Type: kCGPathElementMoveToPoint || Point: {12.75, 18.75}
Type: kCGPathElementAddQuadCurveToPoint || Point: {11.5, 18.94}
Type: kCGPathElementAddLineToPoint || Point: {11.5, 19.95}
Type: kCGPathElementAddQuadCurveToPoint || Point: {11.5, 20.41}
..
..
Type: kCGPathElementAddQuadCurveToPoint || Point: {12.75, 18.169}
Type: kCGPathElementCloseSubpath || Point: {12.75, 18.169}
我在這裏輸入的字符是ก็,我們可以清楚地看到,它在輸出兩個不同的路徑(即,兩個kCGPathElementMoveToPoint和兩個kCGPathElementCloseSubpath)。
我不知道如何正確或很好地創建兩個單獨的CGPathRefs。