Попытка установить уникальные состояния 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 также очищает текущий путь после рисования, поэтому все должно быть в порядке.

Другие вопросы по тегам