Как нарисовать несколько UIBezierPath с разными цветами в UIView
Я хотел бы нарисовать несколько UIBezierPath в uiview с разными штрихами и цветом заливки.
Вот код
- (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];
Проблема заключается в том, что штрих и цвет заливки заданы в текущем контексте.
Можно ли рисовать различные UIBezierPath с разными цветами в одном и том же CGContextRef?
Или мне нужно нарисовать каждый UIBezierPath в отдельном uiview?
Ответы
Ответ 1
Вы должны добавить
[desiredStrokeColor setStroke];
[desiredFillColor setFill];
указывая, что это новые цвета, которые в дальнейшем должны использоваться в этом контексте. Вы должны сделать это до каждого раза, когда вы вызываете
[aNewPath fill];
[aNewPath stroke];
чтобы пути рисовались с этими цветами.
Нет необходимости использовать новое представление для каждого пути безье.
Ответ 2
используйте этот
int count = 0;
for(UIBezierpath *_paths in pathArray)
{
UIColor *_color = [delegate1.colorArray objectAtIndex:q];
[_color setStroke];
[_path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
count++;
}
В касании начали хранить ваши пути и цвета в двух массивах и использовать их в прямом порядке, как показано выше.
Ответ 3
Просто определите UIColor * setStroke; в файле .h и установите этот объект 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];
}