Quartz 2D图形上下文

时间:2009-12-17 22:44:49

标签: iphone quartz-2d

为什么必须从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");
}

2 个答案:

答案 0 :(得分:3)

他们没有。也许你应该再详细说明一下。

Cocoa在调用drawRect实现之前为您设置了一个上下文。如果您想在其他地方绘制某些内容,那么该设置工作是您的责任。

答案 1 :(得分:2)

UIGraphicsGetCurrentContext从框架中设置的堆栈中检索图形上下文。 UIKit保证在调用drawRect方法时,有效的图形上下文已被推送到此堆栈。从它返回后,此堆栈将弹出。如果你在drawRect函数之外调用它,它将无效。

相反,如果你想在drawRect之外调用它,你需要创建/获取自己的图形上下文并绘制到它上面。

一些绘图函数,例如NSString drawAtPoint:withFont:也使用此堆栈;如果当前上下文无效,则需要调用UIGraphicsPushContext