Очень разочаровывающий опыт понимания UIGraphicsPushContext (context) и UIGraphicsPopContext ()
Насколько я понимаю, я могу установить атрибуты контекста, такие как цвет обводки, а затем поместить контекст в стек, чтобы я мог установить новый цвет для текущего контекста. Когда я это сделаю, я могу вернуться к контексту, щелкнув по нему.
Ниже мой код. Когда я запускаю код ниже, две линии нарисованы синим цветом. Что я ожидаю, так это то, что я сначала установил зеленый цвет. Перейдите к функции blueLine и нажмите зеленый контекст. Нарисуйте синим цветом. Тогда поп зеленый контекст. Разрешение функции drawLine рисовать зеленым цветом.
Вот скриншот того, что нарисовано (две синие линии): http://dl.dropbox.com/u/1207310/iOS%20Simulator%20Screen%20shot%20Feb%205%2C%202012%209.00.35%20PM.png
Любая помощь приветствуется! Спасибо.
- (void)drawBlueLine:(CGContextRef)context
{
UIGraphicsPushContext(context);
[[UIColor blueColor] setStroke];
CGContextBeginPath(context);
CGContextMoveToPoint(context, self.bounds.origin.x, 100);
CGContextAddLineToPoint(context, self.bounds.origin.x+self.bounds.size.width, 200);
CGContextStrokePath(context);
UIGraphicsPopContext();
}
- (void)drawLine:(CGContextRef)context
{
UIGraphicsPushContext(context);
CGContextBeginPath(context);
CGContextMoveToPoint(context, self.bounds.origin.x, 200);
CGContextAddLineToPoint(context, self.bounds.origin.x+self.bounds.size.width, 300);
CGContextStrokePath(context);
UIGraphicsPopContext();
}
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
[[UIColor redColor] setStroke];
CGContextSetLineWidth(context, 5.0);
[self drawBlueLine:context];
[self drawLine:context];
}
Или это не должно работать?
- (void)drawLine:(CGContextRef)oldContext
{
UIGraphicsPushContext(oldContext); //makes oldContext the current context but there is a copy on the stack
[[UIColor blueColor] setStroke];
CGContextBeginPath(oldContext);
CGContextMoveToPoint(oldContext, self.bounds.origin.x, 200);
CGContextAddLineToPoint(oldContext, self.bounds.origin.x+self.bounds.size.width, 300);
CGContextStrokePath(oldContext);
UIGraphicsPopContext(); //previous oldContext is moved back into place containing red?
}
- (void)drawRect:(CGRect)rect
{
CGContextRef oldContext = UIGraphicsGetCurrentContext();
[[UIColor redColor] setStroke];
[self drawLine:oldContext];
//anything I draw here should be red. Shouldn't it?`