1

Core Graphics を使用して描画された線に関する情報を格納する、多数の「線」オブジェクトがあります。問題は、それぞれが固有の色とストローク幅を持つ複数の線オブジェクトが存在する可能性があるにもかかわらず、すべての線が同じ色とストローク幅で描画されることです。

各線オブジェクトには、ストロークの色、ストロークの幅、CGPoint の NSMutableArray などの属性があります。私の drawRect メソッドには、各ライン オブジェクトの各 CGPoint を処理する NSEnumerator イテレータと、コレクション内の各ライン オブジェクトに対して上記の処理を行う while ループがあります。新しい各行の開始時に、CGContext メソッドを使用してストロークの色と太さを設定します (以下のコード)。各線を独自の色で描画するにはどうすればよいですか?

- (void)drawRect:(CGRect)rect {

    if(hasDrawnBefore){


        myContext = UIGraphicsGetCurrentContext();
        CGContextSetLineCap(myContext, kCGLineCapRound);

        int numberOfLines = [myLines count];
        int h = 0;
        while(h < numberOfLines){

            CGContextSetStrokeColorWithColor(myContext, [[[myLines objectAtIndex:h] lineColor] CGColor]);
            CGContextSetLineWidth(myContext, [[myLines objectAtIndex:h] lineThickness]);
            NSLog(@"<---------------------- Changed Color and Stroke-Width! ------------------------>");


            NSEnumerator *myEnumerator = [[[myLines objectAtIndex:h] linePoints] objectEnumerator];
            PointObject* object;
            int enumIndex = 0;

            while ((object = [myEnumerator nextObject])) {


                if(enumIndex == 0){

                    CGContextMoveToPoint(myContext, object.coordX,  object.coordY);

                }else{


                    CGContextAddLineToPoint(myContext, object.coordX, object.coordY);

                }

                enumIndex++;
            }

            NSLog(@"Just Iterated on the %i th line of %i lines", h, numberOfLines);
            h++;    
        }

        CGContextStrokePath(myContext);
        NSLog(@"DRAWING");

    }else{
        NSLog(@"No Drawings Yet");

    }
}
4

1 に答える 1

1

線は CGContextStrokePath を呼び出したときにのみ実際に描画されるため、すべての線は最後に追加した線の色と幅で描画されます。動かせばいいと思います

CGContextStrokePath(myContext);

whileループ内の行で、目的の動作が得られます。CGContextStrokePath も、描画後に現在のパスをクリアするので、問題ないはずです。

于 2009-08-20T03:41:52.357 に答える