如何在UIView中使用不同的颜色绘制多个UIBezierPath

我想在不同的笔触和填充颜色的uiview中绘制多个UIBezierPath。

这是代码

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

问题在于笔画和填充颜色是在当前上下文中设置的。 有可能在同一个CGContextRef中用不同的颜色绘制不同的UIBezierPath?

或者我必须在单独的uiview中绘制每个UIBezierPath?

你应该添加

 [desiredStrokeColor setStroke]; [desiredFillColor setFill]; 

表明这些是在这方面必须进一步使用的新颜色。 每次打电话给你之前,你都应该这样做

 [aNewPath fill]; [aNewPath stroke]; 

这样就可以用这些颜色绘制path。

不需要为每个贝塞尔path使用新的视图。

用这个

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

联系开始存储你的path和颜色在两个数组,并像上面那样使用它们。

只需定义一个UIColor * setStroke; 在.h文件中,并在调用[myPath strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];之前设置此strokeColor对象[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]; }