2

パス オブジェクトの Fill 部分を表す CGPath または何らかのタイプのコレクションを返すためのコアまたはその他のフレームワーク メソッドはありますか?

基本的にCGPathCreateCopyByStrokingPathの反対を行うものを探しています。

低レベル テキスト レンダリングに関する記事の助けを借りて、アルファベットの各文字を表すパスを思いつくことができました。

問題は、パスが文字のアウトラインであり、実際に必要なのは、ストロークではなく文字の塗りつぶし部分のみを表すパスであることです。たとえば、文字「A」は 3 つの異なる行で構成されます。

私は現在、複雑すぎる 16 セグメント ディスプレイのように動作するクラスでこの問題を回避しようとしています。興味のある人のために、その努力からのサンプルコードを次に示します。

const NSUInteger segmentsPerDimension = 4;
const CGFloat oneOverTheNumberOfSegments = 1.0 / segmentsPerDimension;

@implementation PathSegments

- (instancetype)initWithRect:(CGRect)rect {
    self = [super init];
    [self setSegmentBounds:rect];
    _segments = [[NSMutableArray alloc] init];
    ...
    [self addVerticalSegments];
    ...
    return self;
}

- (void)addVerticalSegments {
    for (NSUInteger i = 0; i <= segmentsPerDimension; i++) {
        [self createColumnSegmentsForRow:i];
    }
}

- (void)createColumnSegmentsForRow:(NSUInteger)row {
    for (NSUInteger i = 0; i < segmentsPerDimension; i++) {
        CGFloat x = _segmentBounds.size.width * oneOverTheNumberOfSegments * row;
        CGFloat yEnd = _segmentBounds.size.height * oneOverTheNumberOfSegments * i;
        CGFloat yStart = _segmentBounds.size.height * oneOverTheNumberOfSegments * (i + 1);
        [self addLineSegmentWithXStart:x YStart:yStart XEnd:x YEnd:yEnd];
    }
}
...
@end
4

1 に答える 1