Изменение цвета с помощью CGContextStrokePath - PullRequest
5 голосов
/ 02 мая 2009

Я пытаюсь нарисовать несколько простых линий с помощью iPhone / Touch SDK. Я хотел бы иметь возможность изменять цвет линий, но вызов CGContextSetRGBStrokeColor, по-видимому, не влияет на нарисованные линии, которые создаются с помощью CGContextAddLineToPoint, до фактического вызова CGContextStrokePath. Поэтому, если я делаю несколько вызовов, чтобы изменить цвет, только тот, который был сделан непосредственно перед CGContextStrokePath, имеет какой-либо эффект. Вот что я имею в виду:

    - (void)drawRect:(CGRect)rect 
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextMoveToPoint(ctx, 0, 0);
    CGContextSetRGBStrokeColor(ctx,1,0,0,1);
    CGContextAddLineToPoint(ctx, 100, 100);
    //CGContextStrokePath(ctx);
    CGContextSetRGBStrokeColor(ctx,0,1,0,1);
    CGContextAddLineToPoint(ctx, 200, 300);
    //CGContextStrokePath(ctx);
    CGContextSetRGBStrokeColor(ctx,0,0,1,1);
    CGContextStrokePath(ctx);
}

Полагаю, я делаю что-то ужасно неправильное, просто не могу понять, что именно. Я думал, что если я добавлю вызовы CGContextStrokePath, это поможет, это не так.

Смотрите обсуждение ниже, как я получил исправленный код:

- (void)drawRect:(CGRect)rect 
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextBeginPath(ctx);
    CGContextMoveToPoint(ctx, 0, 0);
    CGContextSetRGBStrokeColor(ctx,1,0,0,1);
    CGContextAddLineToPoint(ctx, 100, 100);
    CGContextStrokePath(ctx);
    CGContextClosePath(ctx);
    CGContextBeginPath(ctx);
    CGContextMoveToPoint(ctx, 100, 100);
    CGContextSetRGBStrokeColor(ctx,0,1,0,1);
    CGContextAddLineToPoint(ctx, 200, 300);
    CGContextStrokePath(ctx);
}

1 Ответ

4 голосов
/ 02 мая 2009

Я не думаю, что вы делаете что-то ужасно неправильное, просто у CGContextStrokePath для данного графического контекста может быть только один RGBStrokeColor одновременно. В результате требуется несколько вызовов CGContextStrokePath, по одному разу для каждого цвета.

Ссылка (не копия) на графический контекст добавляется в этот стек операций рисования при каждом вызове CGContextAddLineToPoint (). Когда вы наконец вызываете CGContextStrokePath (), используется последнее значение для RGBStrokeColor.

Если вы хотите использовать несколько цветов с одним и тем же графическим контекстом, то, по-видимому, вам нужно сделать несколько вызовов CGContextStrokePath (), изменив значение RGBStrokeColor () в графическом контексте между вызовами. Пример кода Apple в AccelerometerGraph / GraphView.m также указывает на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...