Я пытаюсь нарисовать несколько строк с помощью iPhone/Touch SDK. Я хотел бы иметь возможность изменять цвет линий, но вызов CGContextSetRGBStrokeColor, похоже, не влияет на рисованные линии, созданные с помощью CGContextAddLineToPoint, до тех пор, пока не будет выполнен фактический вызов CGContextStrokePath. Поэтому, если я делаю несколько вызовов, чтобы изменить цвет, только тот, который был сделан непосредственно перед 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);
}
Хм. Это тоже я пришел к выводу, но когда я запускаю код выше в симуляторе с линиями CGContextStrokePath (ctx), которые не закомментированы, я получаю первую строку, нарисованную красным цветом, а затем ничего. То, что мне кажется, это должно сделать, это нарисовать первую строку красным цветом, а затем нарисовать вторую в зеленом цвете, но если я запустил ее в симуляторе iPhone, это не так. – stinkymatt
Возможно, текущий путь (включая начальную точку) стирается при первом вызове? Согласно документам Apple - «Quartz использует ширину линии и цвет штриха графического состояния для рисования пути. В качестве побочного эффекта при вызове этой функции Quartz очищает текущий путь». –
Во-первых, я рекомендую вам использовать слово «стертое». Это один из моих любимых. Во-вторых, я благодарю вас за то, что помогли мне увидеть документы по-другому. Что нужно сделать, так это вызвать CGContextBeginPath (ctx). Затем измените цвет хода, переместите начальную точку и добавьте линию, затем выполните штрих и закройте путь. Повторите для последующих сегментов линии. Я попытаюсь добавить исправленный код к моему оригинальному сообщению для потомков. Благодаря! – stinkymatt