2009-08-19 9 views
1

Ich habe eine Reihe von 'Linie' Objekte - jeder speichert Informationen über eine Linie mit Core Graphics gezeichnet. Das Problem ist, dass, obwohl es mehrere Linienobjekte gibt, die jeweils eine eindeutige Farbe und Strichbreite haben, alle Linien unter der gleichen Farbe und Strichbreite gezeichnet werden.Versuchen, eindeutige CoreGraphics (iphone) States für jeden Strich

Jedes Linienobjekt verfügt über Attribute wie Strichfarbe, Strichbreite und ein NSMutableArray von CGPoints. In meiner DrawRect-Methode habe ich einen NSEnumerator-Iterator, der durch jeden CGPoint jedes Linienobjekts und eine while-Schleife arbeitet, die das obige für jedes Linienobjekt in meiner Sammlung ausführt. Zu Beginn jeder neuen Zeile setze ich die Strichfarbe und -dicke mit CGContext-Methoden (Code unten). Wie kann ich jede Linie mit einer eigenen Farbe zeichnen?

- (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"); 

    } 
} 

Antwort

1

Die Linien eigentlich nur gezogen werden, wenn Sie CGContextStrokePath rufen, so dass alle Ihre Linien sind immer mit der Farbe und Breite der letzten Zeile gezogen Sie hinzugefügt. Ich denke, wenn Sie nur die

CGContextStrokePath(myContext); 

Linie innerhalb der while-Schleife

bewegen, werden Sie Ihr gewünschtes Verhalten bekommen. CGContextStrokePath löscht auch den aktuellen Pfad nach dem Zeichnen, also sollte es in Ordnung sein.