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.
Es sieht nicht so aus, als würdest du tatsächlich einen Pfad streichen, also gibt es keinen zu schließen. – Abizern
Könnten Sie eine Antwort geben. Ich verstehe nicht so viel. Vielen Dank! –
Lass mich raten? Du bekommst keine Form, nur eine Linie? Jedes Mal, wenn Sie berühren, wird der aktuelle Unterpfad geschlossen. – Abizern