2013-02-15 3 views
5

Моя попытка рисовать линии UIBezierPath с разными цветами не позволяет мне. Все линии меняются на текущий выбранный цвет. Весь мой путь и информация хранятся в NSMutableArray с именем pathInfo. В информации о пути я падаю в массив, содержащий Path, Color, Width и Type of line. Это прекрасно работает, за исключением того, что все линии обращаются к какому-либо цвету, выбранному пользователем. Я был бы признателен за любую помощь!UIBezierPath Multiple Line Colors

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

Пожалуйста, передайте мне свой полный код для этого, если это возможно. На самом деле я тоже сталкиваюсь с такой же проблемой. Но я использую touchhesBegan, касается методаMoved и касается метода AND. Я не могу этого сделать. – Abha

ответ

3

Интенсивность удара/заливки влияет только на команду -stroke. Они не влияют на команду -appendPath:. Контуры не содержат информации о цвете каждого сегмента.

Если вам нужна разноцветная линия, вам понадобится погладить каждый цвет отдельно.

+0

И как мне это сделать @ Kevin-Ballard – JasonBourne

+0

@JasonBourne: вместо добавления всех ваших путей в один мастер-путь просто по очереди по очереди. –

+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