2

私は次のような形を描いています:

- (void)drawRect:(CGRect)rect
{
    // Draw a cross rectagle
    CGContextRef    context     =   UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextMoveToPoint(context, 190, 0);
    CGContextAddLineToPoint(context, 220, 0);
    CGContextAddLineToPoint(context, 310, 90);
    CGContextAddLineToPoint(context, 310, 120);
    CGContextSetFillColorWithColor(context, [UIColor lightGrayColor].CGColor);
    CGContextFillPath(context);
    CGContextRestoreGState(context);
}

下に明暗のクロスフラグが表示されます

ここに画像の説明を入力

先ほど描いた十字旗の周りにストロークを描きたいと思います

これを達成するにはどうすればよいですか。この問題についてアドバイスをください。ありがとう。

4

2 に答える 2

2

きっとCGContextDrawPath(context, kCGPathFillStroke);あなたが求めているのは

以下を使用して、パターンと色を調整できます。

CGContextSetStrokePattern
CGContextSetStrokeColor

https://developer.apple.com/library/ios/#documentation/graphicsimaging/reference/CGContext/Reference/reference.html

したがって、あなたの場合、プレーンな黒のストロークが必要だとすると、次のようになります。

- (void)drawRect:(CGRect)rect
{
    CGContextRef    context     =   UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    CGContextSetLineWidth(context, 2.0);
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextSetFillColorWithColor(context, [UIColor lightGrayColor].CGColor);

    CGContextMoveToPoint(context, 190, 0);
    CGContextAddLineToPoint(context, 220, 0);
    CGContextAddLineToPoint(context, 310, 90);
    CGContextAddLineToPoint(context, 310, 120);
    CGContextClosePath(context);

    CGContextDrawPath(context, kCGPathFillStroke);
    CGContextFillPath(context);

    CGContextRestoreGState(context);
}

プロデュース:

クラフトワーク懐かしい! drawRect の結果:

于 2012-11-06T17:51:15.537 に答える
0
- (void)drawRect:(CGRect)rect
{
    // Draw a cross rectagle
    CGContextRef    context     =   UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    //New
    CGContextSetLineWidth(context, 2.0);

    CGContextMoveToPoint(context, 190, 0);
    CGContextAddLineToPoint(context, 220, 0);
    CGContextAddLineToPoint(context, 310, 90);
    CGContextAddLineToPoint(context, 310, 120);

    //New
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);

    CGContextSetFillColorWithColor(context, [UIColor lightGrayColor].CGColor);
    CGContextFillPath(context);

    //New
    CGContextStrokePath(context);

    CGContextRestoreGState(context);
}

@WDUK:それを理解するために何時間も費やした後、上記の答えが機能しない理由がわかりました。その理由は、最初に行うと、パスが最終的にクリアされ、その後再びCGContextFillPath行うことができなくなるためです。CGContextStrokePathしたがって、 と を行うためにCGContextFillPathCGContextStrokePath私たちはしなければなりません

CGContextDrawPath(context,  kCGPathFillStroke);

試した後、次のようになりました

ここに画像の説明を入力

于 2012-11-06T19:43:17.663 に答える