我试图通过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。