2013-02-15 10 views
5

異なる色のUIBezierPath線を描画しようとしていますが失敗しています。すべての線が現在選択されている色に変わります。私のすべてのパスと情報は、すべてpathInfoという名前のNSMutableArrayに格納されています。パス情報では、パス、色、幅、行のタイプを含む配列をドロップします。これは、すべての行がユーザーが選択した色に変わる以外は問題ありません。私はどんな助けにも大いに感謝します!UIBezierPath複数の線の色

- (void)drawRect:(CGRect)rect { 
    UIBezierPath *drawPath = [UIBezierPath bezierPath]; 
    drawPath.lineCapStyle = kCGLineCapRound; 
    drawPath.miterLimit = 0; 

    for (int i = 0; i < [pathInfo count]; i++){ 
     NSArray *row = [[NSArray alloc] initWithArray:[pathInfo objectAtIndex:i]]; 
     NSLog(@"Path: %@",[row objectAtIndex:0]); 
     NSLog(@"Color: %@",[row objectAtIndex:1]); 
     NSLog(@"Width: %@",[row objectAtIndex:2]); 
     NSLog(@"Type: %@",[row objectAtIndex:3]); 

     //width 
     drawPath.lineWidth = [[row objectAtIndex:2] floatValue]; 

     //color 
     [[row objectAtIndex:1] setStroke]; 

     //path 
     [drawPath appendPath:[row objectAtIndex:0]]; 

    } 

    UIBezierPath *path = [self pathForCurrentLine]; 
    if (path) 
    [drawPath appendPath:path]; 

    [drawPath stroke]; 
} 

- (UIBezierPath*)pathForCurrentLine { 
    if (CGPointEqualToPoint(startPoint, CGPointZero) && CGPointEqualToPoint(endPoint, CGPointZero)){ 
     return nil; 
    } 

    UIBezierPath *path = [UIBezierPath bezierPath]; 
    [path moveToPoint:startPoint]; 
    [path addLineToPoint:endPoint]; 

    return path; 

} 
+0

はこのために私にあなたの完全なコードを渡してください。実際に私も同じ問題に直面しています。しかし、私はtouchesBegan、touchesMovedおよびtouchesEndメソッドを使用しています。私はできません。 – Abha

答えて

3

ストローク/塗りつぶしの色は、-strokeコマンドにのみ影響します。これらは、-appendPath:コマンドには影響しません。パスにはセグメントごとの色情報は含まれません。

多色の線が必要な場合は、各色を別々にストロークする必要があります。

+0

そしてどうすればよいのですか@ Kevin-Ballard – JasonBourne

+0

@JasonBourne:すべてのパスを1つのマスターパスに追加するのではなく、各パスを順番にストロークするだけです。 –

+0

それは私がやっていることではありませんか?それぞれがfor文@ kevin-ballardで描画されます – JasonBourne

2

は、あなたのストロークの色(と何を持っている)、そしてstrokeを設定し、次のパスに移動します。可能であれば

- (void)drawRect:(CGRect)rect 
{ 
    for (int i = 0; i < [pathInfo count]; i++){ 
     NSArray *row = [[NSArray alloc] initWithArray:[pathInfo objectAtIndex:i]]; 

     NSLog(@"Path: %@",[row objectAtIndex:0]); 
     NSLog(@"Color: %@",[row objectAtIndex:1]); 
     NSLog(@"Width: %@",[row objectAtIndex:2]); 
     NSLog(@"Type: %@",[row objectAtIndex:3]); 

     UIBezierPath *path = [row objectAtIndex:0]; 

     path.lineCapStyle = kCGLineCapRound; 
     path.miterLimit = 0; 

     //width 
     path.lineWidth = [[row objectAtIndex:2] floatValue]; 

     //color 
     [[row objectAtIndex:1] setStroke]; 

     //path 
     [path stroke]; 
    } 

    UIBezierPath *path = [self pathForCurrentLine]; 
    if (path) 
    { 
     // set the width, color, etc, too, if you want 
     [path stroke]; 
    } 
} 
+1

あなたの答えはまた有効です!私もあなたの助けに感謝ロブ!この方法はうまくいくようです。 – JasonBourne