我如何在drawrect之外做直接类型的东西?

时间:2011-05-18 19:23:31

标签: iphone objective-c ios graphics core-graphics

我有一个名为Icon的基于UIView的类。在那里,我希望有类似的代码:

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时会调用它。我如何将这种代码放在我的Icon类中的其他地方?我试着将它放在一个位置,它给了我:

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 个答案:

答案 0 :(得分:5)

继续在-drawRect:中完成所有绘图。当某些内容发生变化并且您希望重新绘制视图时,请向其发送-setNeedsDisplay-setNeedsDisplayInRect:消息。

答案 1 :(得分:2)

确保图像上下文的尺寸无效。如果它们是例如{0,0},那么您将获得创建上下文的NULL响应,并且所有需要有效位图上下文的调用将告诉您0x0不是有效的上下文。

答案 2 :(得分:1)

也许您正在寻找UIGraphicsPushContext(上下文)?您可以在UIKit可用的任何位置使您的图像上下文在其上绘制。在绘图后不要忘记UIGraphicsPopContext()。

答案 3 :(得分:0)

如何将它放在initWithFrame中?这对你有用吗?