2013-02-15 30 views
5

Nỗ lực của tôi để vẽ các đường UIBezierPath với các màu khác nhau không làm tôi thất vọng. Tất cả các dòng thay đổi màu hiện đang được chọn. Tất cả đường dẫn và thông tin của tôi đều được lưu trữ trong một NSMutableArray có tên là pathInfo. Trong thông tin đường dẫn, tôi thả mảng chứa Đường dẫn, Màu, Chiều rộng và Loại dòng. Điều này làm việc tốt ngoại trừ tất cả các dòng chuyển sang bất kỳ màu nào người dùng đã chọn. Tôi sẽ đánh giá cao sự giúp đỡ rất nhiều!UIBezierPath Nhiều Màu Đường kẻ

- (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

Hãy vượt qua tôi mã hoàn chỉnh của bạn cho việc này nếu có thể. Trên thực tế tôi cũng phải đối mặt với cùng một vấn đề. Nhưng tôi đang sử dụng touchesBegan, touchesMoved và touchesEnd phương pháp. Tôi không thể làm được. – Abha

Trả lời

3

Màu stroke/fill chỉ ảnh hưởng đến lệnh -stroke. Chúng không ảnh hưởng đến lệnh -appendPath:. Đường dẫn không chứa thông tin màu cho từng đoạn.

Nếu bạn cần một dòng nhiều màu, bạn sẽ cần phải đột quỵ từng màu riêng biệt.

+0

Và làm thế nào để tôi làm điều đó @ Kevin-Ballard – JasonBourne

+0

@JasonBourne: Thay vì phụ thêm tất cả các đường dẫn của bạn vào một đường dẫn chính, chỉ cần đột quỵ mỗi đường dẫn lần lượt. –

+0

Đó không phải là những gì tôi đang làm? Mỗi cái được vẽ trong câu lệnh @ kevin-ballard – JasonBourne

2

Đặt màu của bạn đột quỵ (và những gì có bạn), sau đó stroke, và sau đó chuyển sang con đường tiếp theo:

- (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

Wow câu trả lời của bạn cũng hợp lệ! Tôi đánh giá cao sự giúp đỡ của bạn quá Rob! Phương pháp này dường như hoạt động tốt hơn. – JasonBourne

Các vấn đề liên quan