2013-03-12 14 views
11

Ich zeichne eine Form von UIBezierPath in touchesMoved.Wie fülle ich Farbe in UIBezierPath?

Ich möchte nach closePath ROTE Farbe darin füllen, kann aber nicht. Bitte helfen Sie!

- (void)drawRect:(CGRect)rect 
{ 
    UIColor *fillColor = [UIColor redColor]; 
    [fillColor setFill]; 
    UIColor *strokeColor = [UIColor blueColor]; 
    [strokeColor setStroke]; 
    [bezierPath closePath]; 
    [bezierPath fill]; 
    [bezierPath stroke]; 
} 
+0

Es sieht nicht so aus, als würdest du tatsächlich einen Pfad streichen, also gibt es keinen zu schließen. – Abizern

+1

Könnten Sie eine Antwort geben. Ich verstehe nicht so viel. Vielen Dank! –

+0

Lass mich raten? Du bekommst keine Form, nur eine Linie? Jedes Mal, wenn Sie berühren, wird der aktuelle Unterpfad geschlossen. – Abizern

Antwort

16

Wenn Sie einen Bezier-Pfad an anderer Stelle gespeichert haben, sollte diese Arbeit:

bearbeiten

Mit Blick auf die bearbeitete Code, was passiert ist, ist, dass, wie Sie schließen Der Pfad, den Sie zeichnen, wird geschlossen - Sie erhalten also eine Linie, keine Form, da Sie nur zwei Punkte haben.

Eine Möglichkeit ist es, den Pfad zu erstellen, während sich Ihre Punkte bewegen, aber eine Kopie dieses Pfades zu streichen und zu füllen. Zum Beispiel diese ungetesteten Code ist, schreibe ich es gerade in

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    secondPoint = firstPoint; 
    firstPoint = [touch previousLocationInView:self]; 
    currentPoint = [touch locationInView:self]; 

    CGPoint mid1 = midPoint(firstPoint, secondPoint); 
    CGPoint mid2 = midPoint(currentPoint, firstPoint); 

    [bezierPath moveToPoint:mid1]; 
    [bezierPath addQuadCurveToPoint:mid2 controlPoint:firstPoint]; 

    // pathToDraw is an UIBezierPath * declared in your class 
    pathToDraw = [[UIBezierPath bezierPathWithCGPath:bezierPath.CGPath]; 

    [self setNeedsDisplay]; 
} 

Und dann Ihre Zeichnung Code kann:

- (void)drawRect:(CGRect)rect { 
    UIColor *fillColor = [UIColor redColor]; 
    [fillColor setFill]; 
    UIColor *strokeColor = [UIColor blueColor]; 
    [strokeColor setStroke]; 

    // This closes the copy of your drawing path. 
    [pathToDraw closePath]; 

    // Stroke the path after filling it so that you can see the outline 
    [pathToDraw fill]; // this will fill a closed path 
    [pathToDraw stroke]; // this will stroke the outline of the path. 

} 

Es gibt einige aufzuräumen, um eine touchesEnded zu tun und dies könnte sein leistungsfähiger gemacht, aber Sie bekommen die Idee.

+0

Wie man Farbe für einen geschlossenen Bezirepath auf CAShapelayer füllt. Für mich ist es immer schwarz in der Farbe. – Madhu

-3

Sie müssen Array Ihrer UIBezierPath s halten. Versuchen Sie diesen Code,

- (void)drawRect:(CGRect)rect 
    { 

     for(UIBezierPath *_path in pathArray){ 


     [_path fill]; 
     [_path stroke]; 
     } 
    } 

    #pragma mark - Touch Methods 
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
     myPath=[[UIBezierPath alloc]init]; 
     myPath.lineWidth = currentSliderValue; 

     UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; 
     [myPath moveToPoint:[mytouch locationInView:self]]; 
     [pathArray addObject:myPath]; 
    } 
    -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
     UITouch *mytouch=[[touches allObjects] objectAtIndex:0]; 
     [myPath addLineToPoint:[mytouch locationInView:self]]; 
     [self setNeedsDisplay]; 

    } 
+0

Es beantwortet nicht die Frage über das Füllen des Pfades. Dies ist nur ein vordefinierter Code zum Zeichnen einer Linie mit Berührungen. – Abizern

+0

Der Code in DrawRect ist der Code, mit dem die Zeichnung gefüllt wird. –

Verwandte Themen