Как мне сделать вещи типа drawrect вне drawrect? - PullRequest
7 голосов
/ 18 мая 2011

У меня есть класс на основе UIView, который называется Icon.Там я хочу получить код, подобный следующему:

UIView *finalView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
finalView.backgroundColor = [UIColor redColor];

UIGraphicsBeginImageContext(finalView.bounds.size);
[finalView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Проблема в том, что я не хочу помещать его в drawRect, потому что он вызывается, когда мое приложение создает каждый значок в другом представлении.Как я могу поместить этот вид кода где-нибудь еще в моем классе Icon?Я попытался поместить это в 1 место, и это дало мне:

CGContextSaveGState: invalid context 0x0
CGContextSetAlpha: invalid context 0x0
CGContextSaveGState: invalid context 0x0
CGContextSetFillColorWithColor: invalid context 0x0
CGContextAddRect: invalid context 0x0
CGContextDrawPath: invalid context 0x0
CGContextRestoreGState: invalid context 0x0
CGContextRestoreGState: invalid context 0x0

Ответы [ 4 ]

5 голосов
/ 19 мая 2011

Продолжайте делать все свои рисунки в -drawRect:.Когда что-то меняется, и вы хотите, чтобы ваш вид был перерисован, отправьте ему сообщение -setNeedsDisplay или -setNeedsDisplayInRect:.

2 голосов
/ 18 июня 2011

Убедитесь, что размеры контекста изображения не являются недействительными. Если они, например, {0,0}, вы получите NULL-ответ, создающий контекст, и все вызовы, нуждающиеся в корректном растровом контексте, сообщат вам, что 0x0 не является допустимым контекстом.

1 голос
/ 19 мая 2011

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

0 голосов
/ 18 мая 2011

Как насчет помещения его в initWithFrame? Будет ли это работать для вас?

...