我有一个名为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
答案 0 :(得分:5)
继续在-drawRect:
中完成所有绘图。当某些内容发生变化并且您希望重新绘制视图时,请向其发送-setNeedsDisplay
或-setNeedsDisplayInRect:
消息。
答案 1 :(得分:2)
确保图像上下文的尺寸无效。如果它们是例如{0,0},那么您将获得创建上下文的NULL响应,并且所有需要有效位图上下文的调用将告诉您0x0不是有效的上下文。
答案 2 :(得分:1)
也许您正在寻找UIGraphicsPushContext(上下文)?您可以在UIKit可用的任何位置使您的图像上下文在其上绘制。在绘图后不要忘记UIGraphicsPopContext()。
答案 3 :(得分:0)
如何将它放在initWithFrame中?这对你有用吗?