Попытка установить уникальные состояния CoreGraphics (iphone) для каждого мазка
У меня есть несколько "линейных" объектов - каждый хранит информацию о линии, нарисованной с помощью Core Graphics. Проблема состоит в том, что, хотя может быть несколько линейных объектов, каждый из которых имеет уникальный цвет и ширину обводки, все линии отрисовываются при одинаковом цвете и ширине обводки.
Каждый линейный объект имеет такие атрибуты, как цвет обводки, ширина обводки и NSMutableArray из CGPoints. В моем методе drawRect у меня есть итератор NSEnumerator, работающий с каждым CGPoint каждого линейного объекта, и цикл while, который выполняет вышеуказанное для каждого строкового объекта в моей коллекции. В начале каждой новой строки я устанавливал цвет обводки и толщину, используя методы CGContext (код ниже). Как я могу нарисовать каждую линию своим уникальным цветом?
- (void)drawRect:(CGRect)rect {
if(hasDrawnBefore){
myContext = UIGraphicsGetCurrentContext();
CGContextSetLineCap(myContext, kCGLineCapRound);
int numberOfLines = [myLines count];
int h = 0;
while(h < numberOfLines){
CGContextSetStrokeColorWithColor(myContext, [[[myLines objectAtIndex:h] lineColor] CGColor]);
CGContextSetLineWidth(myContext, [[myLines objectAtIndex:h] lineThickness]);
NSLog(@"<---------------------- Changed Color and Stroke-Width! ------------------------>");
NSEnumerator *myEnumerator = [[[myLines objectAtIndex:h] linePoints] objectEnumerator];
PointObject* object;
int enumIndex = 0;
while ((object = [myEnumerator nextObject])) {
if(enumIndex == 0){
CGContextMoveToPoint(myContext, object.coordX, object.coordY);
}else{
CGContextAddLineToPoint(myContext, object.coordX, object.coordY);
}
enumIndex++;
}
NSLog(@"Just Iterated on the %i th line of %i lines", h, numberOfLines);
h++;
}
CGContextStrokePath(myContext);
NSLog(@"DRAWING");
}else{
NSLog(@"No Drawings Yet");
}
}
1 ответ
Линии на самом деле рисуются только тогда, когда вы вызываете CGContextStrokePath, поэтому все ваши линии рисуются с цветом и шириной последней добавленной линии. Я думаю, что если вы просто переместите
CGContextStrokePath(myContext);
Строка внутри цикла while, вы получите желаемое поведение. CGContextStrokePath также очищает текущий путь после рисования, поэтому все должно быть в порядке.