2013-02-15 8 views
5

Il tentativo di disegnare linee UIBezierPath con colori diversi non funziona. Tutte le linee cambiano al colore attualmente selezionato. Tutti i miei percorsi e le informazioni sono tutti memorizzati in un NSMutableArray chiamato pathInfo. Nelle informazioni sul percorso faccio cadere una matrice che contiene il percorso, il colore, la larghezza e il tipo di linea. Funziona bene, tranne che tutte le linee si trasformano in qualsiasi colore l'utente abbia selezionato. Apprezzerei molto l'aiuto!UIBezierPath Colori linea multipla

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

Si prega di passarmi il codice completo per questo, se possibile. In realtà anch'io sto affrontando lo stesso problema. Ma sto usando i touchBegan, toccaMoved e tocca il metodo End. Non sono in grado di farlo. – Abha

risposta

3

I colori di tratto/riempimento interessano solo il comando -stroke. Non influiscono sul comando -appendPath:. I percorsi non contengono informazioni sul colore per segmento.

Se è necessaria una linea multicolore, sarà necessario accorciare ciascun colore separatamente.

+0

E come faccio a farlo @ Kevin-Ballard – JasonBourne

+0

@JasonBourne: Invece di aggiungere tutti i percorsi in un percorso principale, basta accarezzare ogni percorso a turno. –

+0

Non è quello che sto facendo? Ognuno viene disegnato nell'istruzione for @ kevin-ballard – JasonBourne

2

Imposta il colore di corsa (e quello che hai), poi stroke, e quindi spostare al percorso successivo:

- (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 anche la tua risposta è valida! Apprezzo il tuo aiuto anche Rob! Questo metodo sembra funzionare meglio. – JasonBourne