¿Cómo llenar el color dentro de UIBezierPath?

Dibujo una forma de UIBezierPath en toquesMovidos.

-(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]; [self setNeedsDisplay]; } 

Quiero llenar el color ROJO dentro de él después de closePath pero no puedo. ¡Por favor ayuda!

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

Si tiene una ruta de bezier almacenada en otro lugar, esto debería funcionar:

Editar

Al mirar su código editado, lo que está sucediendo es que, mientras cierra, la ruta que está dibujando se cierra, de modo que obtiene una línea, no una forma, ya que solo tiene dos puntos.

Una forma de evitar esto es crear la ruta a medida que se mueven sus puntos, pero trazo y llena una copy de esa ruta. Por ejemplo, este es un código no probado, lo estoy escribiendo directamente

 -(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 * declanetworking in your class pathToDraw = [[UIBezierPath bezierPathWithCGPath:bezierPath.CGPath]; [self setNeedsDisplay]; } 

Y luego su código de dibujo puede:

 - (void)drawRect:(CGRect)rect { UIColor *fillColor = [UIColor networkingColor]; [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. } 

Hay un poco de order para hacer un touchesEnded y esto podría ser más touchesEnded , pero tienes la idea.

Tienes que mantener un array de tus UIBezierPath s. Pruebe este código,

  - (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]; }