2012-09-11 2 views
0

У меня возникают проблемы с тем, чтобы работать с темами. Нижеследующий тест должен содержать два оранжевых и один зеленый прямоугольник.Работа с UIGraphicsPushContext (aContext) и UIGraphicsPopContext()

Вот мое понимание кода ниже ...

  • Рисую оранжевый прямоугольник на 50,50
  • я называю ничью greenRect на 200,200, посылая текущий контекст
  • Я толкаю текущий контекст в стеке, измените цвет штриха и нарисуйте зеленый прямоугольник на 100 100
  • Я выхожу из текущего контекста, который должен восстановить исходный контекст (цвет оранжевого штриха)
  • Затем я рисую последний прямоугольник, который должен быть поглаживание оранжевый

Последний прямоугольник должен тактный оранжевый, но поглаживание зеленый, говорил мне, что я изменил первоначальный контекст

Мысли?

- (void)drawRect:(CGRect)rect{ 

CGRect aRectangle=CGRectMake(50., 50., 40., 40.); 
UIBezierPath *path=[UIBezierPath bezierPathWithRect:aRectangle]; 
UIColor *strokeColor=[UIColor orangeColor]; 
[strokeColor setStroke]; 
[path stroke]; 

CGContextRef context=UIGraphicsGetCurrentContext(); 

[self drawGreenRect:context]; 

CGRect anotherRectangle=CGRectMake(100., 100., 40., 40.); 
UIBezierPath *anotherPath=[UIBezierPath bezierPathWithRect:anotherRectangle]; 
[anotherPath stroke]; 

}

- (void)drawGreenRect:(CGContextRef)ctxt{ 

UIGraphicsPushContext(UIGraphicsGetCurrentContext()); 

CGRect aRectangle=CGRectMake(200., 200., 40., 40.); 
UIBezierPath *path=[UIBezierPath bezierPathWithRect:aRectangle]; 
UIColor *strokeColor=[UIColor greenColor]; 
[strokeColor setStroke]; 
[path stroke]; 

UIGraphicsPopContext(); 

}

ответ

1

UIGraphicsPushContext() не создает новый контекст для вас, это просто выталкивает контекст вы передаете в стек. Итак, после того, как вы сделаете UIGraphicsPushContext(UIGraphicsGetCurrentContext());, у вас есть стек контекста графики два глубоких, но оба элемента на нем - это тот же контекст, который был настроен вашим представлением для вас.

Вам нужно будет создать контекст для нажатия, наиболее вероятно используя UIGraphicsBeginImageContext(). Затем вы можете получить изображение из этого контекста и поместить его в свое представление.

+0

Документы Apple говорят, что UIGraphicsPushContext Делает указанный контекст графики текущим контекстом. Вы можете использовать эту функцию, чтобы сохранить предыдущее состояние графики и сделать указанный контекст текущим контекстом. Вы должны уравновешивать вызовы этой функции с помощью соответствующих вызовов функции UIGraphicsPopContext. Вы должны вызывать эту функцию только из основного потока вашего приложения. Как использовать эту функцию для сохранения графического контекста? – suhrmesa

 Смежные вопросы

  • Нет связанных вопросов^_^