我是XCode的全新手,所以我一直在攀登Quartz2D学习曲线。我知道每当需要刷新视图的图形时,就会调用视图的drawRect方法,并且setNeedsDisplay方法会激活重绘。
但我找不到的是对图形上下文和特定视图之间关系的清晰解释。图形上下文本身显然不是视图的实例变量,所以如果我想修改视图,并使用CGContext ...方法创建复杂路径,需要将图形上下文与视图结合的代码是什么希望改变?
提前感谢您对此问题的任何指导。
jrdoner
答案 0 :(得分:3)
您可以创建图形上下文,但只有在复杂的绘图操作中才需要。对于大多数情况,它都是为您完成的。您只需要通过调用UIGraphicsGetCurrentContext()
来获取上下文。
当框架确定视图需要重绘时(由于各种原因,其中一个原因是您通过调用setNeedsDisplay:
指示它),它将生成(或恢复)该视图的图形上下文,并使它是调用-drawRect:
之前的当前上下文。然后,您的工作就是在您提供的上下文中绘制。之后,剪辑结果上下文,将其与其他上下文混合并最终将其绘制到屏幕内存中是框架的问题。
如果你能提供帮助,请务必在-drawRect:
中做太多复杂的绘画。 iPhone没有台式机那样强大的CPU,建议您使用图像而不是路径来完成大部分绘图工作。 Apple甚至从Mac中删除了许多更方便的绘图包装器,几乎故意阻止开发人员过多地使用Core Graphics。
答案 1 :(得分:1)
我假设您正在-(void)drawRect:(CGRect)rect
子类的UIView
方法中创建路径。
在drawRect中,您可以通过调用(CGContextRef)UIGraphicsGetCurrentContext(void);
- (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);
}