Cómo dibujar múltiples UIBezierPath con diferentes colors en una UIView

Me gustaría dibujar múltiples UIBezierPath en una uiview con diferente trazo y color de relleno.

Aquí está el código

- (void)drawRect:(CGRect)rect { context = UIGraphicsGetCurrentContext(); [[UIColor grayColor] setFill]; [[UIColor greenColor] setStroke]; UIBezierPath *aPath = [[UIBezierPath alloc] init]; [aPath moveToPoint:CGPointMake(227,34.25)]; [aPath addLineToPoint:CGPointMake(298.25,34.75)]; [aPath addLineToPoint:CGPointMake(298.5,82.5)]; [aPath addLineToPoint:CGPointMake(251,83)]; [aPath addLineToPoint:CGPointMake(251,67.5)]; [aPath addLineToPoint:CGPointMake(227.25,66.75)]; [aPath closePath]; aPath.lineWidth = 2; [aPath fill]; [aPath stroke]; UIBezierPath* aPath2 = [[UIBezierPath alloc] init]; [aPath2 moveToPoint:CGPointMake(251.25,90.5)]; [aPath2 addLineToPoint:CGPointMake(250.75,83.25)]; [aPath2 addLineToPoint:CGPointMake(298.5,83)]; [aPath2 addLineToPoint:CGPointMake(298.5,90.25)]; [aPath2 closePath]; aPath2.lineWidth = 2; [aPath2 fill]; [aPath2 stroke]; [paths addObject:aPath2]; 

El problema es que el trazo y el color de relleno se establecen en el context actual. ¿Es posible dibujar diferentes UIBezierPath con diferentes colors en el mismo CGContextRef?

¿O debo dibujar cada UIBezierPath en uiview por separado?

Debe agregar

 [desinetworkingStrokeColor setStroke]; [desinetworkingFillColor setFill]; 

indicando que estos son los nuevos colors que deben utilizarse más adelante en este context. Deberías hacer esto antes de cada vez que llamas a un

 [aNewPath fill]; [aNewPath stroke]; 

para que los paths se dibujen con esos colors.

No es necesario usar una nueva vista para cada ruta más bonita.

utilizar esta

 int count = 0; for(UIBezierpath *_paths in pathArray) { UIColor *_color = [delegate1.colorArray objectAtIndex:q]; [_color setStroke]; [_path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0]; count++; } 

En contacto comenzó a almacenar sus paths y colors en dos arreglos y los utiliza en drawrect como arriba.

Simplemente defina un UIColor * setStroke; en el file .h y establezca este object strokeColor antes de llamar [myPath strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];

  - (void)drawRect:(CGRect)rect { [strokeColor setStroke]; // this method will choose the color from the receiver color object (in this case this object is :strokeColor) for(UIBezierPath *_path in pathArray) [myPath strokeWithBlendMode:kCGBlendModeNormal alpha:1.0]; } #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]; }