如何将视图连接到图形上下文?

时间:2009-05-25 02:56:29

标签: cocoa cocoa-touch xcode

我是XCode的全新手,所以我一直在攀登Quartz2D学习曲线。我知道每当需要刷新视图的图形时,就会调用视图的drawRect方法,并且setNeedsDisplay方法会激活重绘。

但我找不到的是对图形上下文和特定视图之间关系的清晰解释。图形上下文本身显然不是视图的实例变量,所以如果我想修改视图,并使用CGContext ...方法创建复杂路径,需要将图形上下文与视图结合的代码是什么希望改变?

提前感谢您对此问题的任何指导。

jrdoner

2 个答案:

答案 0 :(得分:3)

您可以创建图形上下文,但只有在复杂的绘图操作中才需要。对于大多数情况,它都是为您完成的。您只需要通过调用UIGraphicsGetCurrentContext()来获取上下文。

当框架确定视图需要重绘时(由于各种原因,其中一个原因是您通过调用setNeedsDisplay:指示它),它将生成(或恢复)该视图的图形上下文,并使它是调用-drawRect:之前的当前上下文。然后,您的工作就是在您提供的上下文中绘制。之后,剪辑结果上下文,将其与其他上下文混合并最终将其绘制到屏幕内存中是框架的问题。

如果你能提供帮助,请务必在-drawRect:中做太多复杂的绘画。 iPhone没有台式机那样强大的CPU,建议您使用图像而不是路径来完成大部分绘图工作。 Apple甚至从Mac中删除了许多更方便的绘图包装器,几乎故意阻止开发人员过多地使用Core Graphics。

答案 1 :(得分:1)

我假设您正在-(void)drawRect:(CGRect)rect子类的UIView方法中创建路径。

在drawRect中,您可以通过调用(CGContextRef)UIGraphicsGetCurrentContext(void);

来访问图形上下文

示例from lecture 5 cs193p

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    [[UIColor grayColor] set];
    UIRectFill ([self bounds]);
    CGContextBeginPath (context);
    CGContextMoveToPoint (context, 75, 10);
    CGContextAddLineToPoint (context, 10, 150);
    CGContextAddLineToPoint (context, 160, 150);
    CGContextClosePath (context);
    [[UIColor redColor] setFill];
    [[UIColor blackColor] setStroke];
    CGContextDrawPath (context, kCGPathFillStroke);
}