12

iPhone アプリで CGContext を使用すると問題が発生します。異なる色でいくつかの線を描画しようとしていますが、すべての線は常に最後に使用された色になります。いくつかのアプローチを試みましたが、うまくいきませんでした。

その問題に対処するために、小さなサンプル プロジェクトを設定しました。これは私のコードで、drawRect メソッドで使用します。赤と青の線を引こうとしています:

- (void)drawRect:(CGRect)rect{
    NSLog(@"drawrect!");
    CGContextRef bluecontext = UIGraphicsGetCurrentContext(); 
    CGContextSetLineWidth(bluecontext, 2.0);
    CGContextSetStrokeColorWithColor(bluecontext, [UIColor blueColor].CGColor);
    CGContextMoveToPoint(bluecontext, 1, 1);
    CGContextAddLineToPoint(bluecontext, 100, 100);
    CGContextSetStrokeColorWithColor(bluecontext, [UIColor redColor].CGColor);
    CGContextAddLineToPoint(bluecontext, 200, 100);
    CGContextStrokePath(bluecontext);
}

ご協力いただきありがとうございます

4

4 に答える 4

21

2 回目に線の色を設定する直前に、次のコードを挿入します。

CGContextStrokePath(bluecontext);
CGContextBeginPath(bluecontext);

すべての AddLine および AddOther 呼び出しがパスを構築しています。パスは、最後に設定された色やその他の属性を使用して、StrokePath などの呼び出しで描画されます。2 つの別々のパスを描画しようとしているので、パスごとに Begin と Stroke を呼び出す必要があります。Begin は、自分で呼び出しても問題はありませんが、描画を開始するときに一種の暗黙的なものです。描画の基本的な流れは次のとおりです。

CGContextBeginPath(bluecontext); // clears any previous path
// add lines, curves, rectangles, etc...
CGContextStrokePath(bluecontext); // renders the path
于 2010-06-15T00:22:05.867 に答える
13

それが必要です。

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect);
CGContextSetLineWidth(context, 2.0);

CGContextBeginPath(context);
CGContextSetStrokeColorWithColor(context, [UIColor orangeColor].CGColor);
CGContextMoveToPoint(context, 1, 1);
CGContextAddLineToPoint(context, 100, 100);
CGContextStrokePath(context); // and draw orange line}

CGContextBeginPath(context);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextMoveToPoint(context, 100, 100);
CGContextAddLineToPoint(context, 200, 100);     
CGContextStrokePath(context); // draw blue line
于 2012-08-02T12:26:03.797 に答える
2

これはうまくいくと思います。

CGContextRef bluecontext = UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(bluecontext, 2.0);
CGContextSetStrokeColorWithColor(bluecontext, [UIColor blueColor].CGColor);
CGContextMoveToPoint(bluecontext, 1, 1);
CGContextAddLineToPoint(bluecontext, 100, 100);

CGContextStrokePath(bluecontext); // draw blue line


CGContextSetStrokeColorWithColor(bluecontext, [UIColor redColor].CGColor);
CGContextAddLineToPoint(bluecontext, 200, 100);

CGContextStrokePath(bluecontext); // and draw red line
于 2012-07-15T14:32:43.887 に答える