为什么必须从drawRect方法中调用Quartz 2D Graphics Contexts函数?
因为如果我从drawRect中的任何地方调用CGGraphics上下文函数,我会得到这样的消息:
<Error>: CGContextFillRects: invalid context
<Error>: CGContextSetFillColorWithColor: invalid context
实际上在UIView的子类中,我在一个名为Render的方法中设置了一个Graphics Context。在调用Render时投注我得到上述错误:
- (void)Render {
CGContextRef g = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(g, [UIColor blueColor].CGColor);
CGContextFillRect(g, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height));
CGContextSetFillColorWithColor(g, [UIColor blackColor].CGColor);
[@"It works!" drawAtPoint:CGPointMake(10.0, 20.0) withFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]];
NSLog(@"gsTest Render");
}
答案 0 :(得分:3)
他们没有。也许你应该再详细说明一下。
Cocoa在调用drawRect实现之前为您设置了一个上下文。如果您想在其他地方绘制某些内容,那么该设置工作是您的责任。
答案 1 :(得分:2)
UIGraphicsGetCurrentContext从框架中设置的堆栈中检索图形上下文。 UIKit保证在调用drawRect方法时,有效的图形上下文已被推送到此堆栈。从它返回后,此堆栈将弹出。如果你在drawRect函数之外调用它,它将无效。
相反,如果你想在drawRect之外调用它,你需要创建/获取自己的图形上下文并绘制到它上面。
一些绘图函数,例如NSString drawAtPoint:withFont:也使用此堆栈;如果当前上下文无效,则需要调用UIGraphicsPushContext