テキストをCGPathRefsを使ってすべての異なる部分に分割しようとしています。たとえば、Lには1つのパスがあり、? 2つ(ドットと残りの部分)があります。CGPathRefを複数のパスに分割します。
現在、「?」の例では、パスとして各文字を取得できます。パスには、ドットと残りの両方が1つに含まれます。私はそれらを分割したいが、私はそれを働かせるように見えない。
テキストをパスに分割する私はスタックオーバーフローから何らかの答えを使用しましたが、これはうまく動作し、ここでは各文字をパスとして取得した部分です。
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));
}
は、これは私にこのような出力を提供します:ここで私はまた、私は、このようgetPointsFromBezier
に各ポイントを見て、個々の地点で
CGPathRef letter = CTFontCreatePathForGlyph(runFont, glyph, NULL);
NSMutableArray *pathElements = [NSMutableArray array];
CGPathApply(letter, (__bridge void * _Nullable)(pathElements), getPointsFromBezier);
を見て「CGPathApply」機能を介して実行します
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}
が、私はここに入力された文字だったก็と我々はそれが出力に2つの異なるパスを持っていることをはっきりと見ることができます(つまり、2 kCGPathElementMoveToPointと2つのkCGPathElementCloseSubpath)。
これから2つの別々のCGPathRefを適切にまたはうまく作成する方法がわかりません。