13

它让我无法理解为什么这段代码在里面drawRect:是有效的:

UIBezierPath *buildingFloor = [[UIBezierPath alloc] init];
// draw the shape with addLineToPoint
[[UIColor colorWithRed:1 green:0 blue:0 alpha:1.0] setFill]; // I'm sending setFill to UIColor object?
[buildingFloor fill]; // Fills it with the current fill color

我的意思是,UIColor对象收到一条消息setFill,然后堆栈以某种方式理解这UIColor现在将成为填充颜色,这不是很奇怪和错误吗?至少我希望通过调用一些CGContext方法来设置填充......但现在不是表示颜色,而是UIColor继续并做一些事情来改变我的绘图的上下文。

有人可以解释幕后发生的事情吗,因为我在这里完全迷失了?

在发布之前,我确实检查了这些参考资料:

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIColor_Class/Reference/Reference.html http://developer.apple.com/library/ios/#documentation/uikit/reference/UIBezierPath_class /参考/参考.html

4

2 回答 2

14

我的意思是,UIColor 对象收到一条消息 setFill,然后堆栈以某种方式理解这个 UIColor 现在将成为填充颜色,这不是很奇怪和错误吗?至少我希望通过调用一些 CGContext 方法来设置填充......但现在 UIColor 不再代表颜色,而是继续并做一些事情来改变我的绘图的上下文。

这是因为这一切都发生在当前的CGContext 中。这就是为什么您的代码仅在存在当前CGContext 时才有效的原因(例如,在块中drawRect:UIGraphicsBeginImageContextWithOptions块中)。

在你学习 iOS 的这个阶段,阅读我的书的绘图章节可能会对你有很大帮助:http ://www.aeth.com/iOSBook/ch15.html#_graphics_contexts

于 2013-05-09T16:36:42.790 回答
7

编写的实现UIColor setFill是为了获取当前图形上下文,然后在该当前上下文上设置颜色。本质上,它为您执行此操作:

UIColor *color = ... // some color
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(ctx, color.CGColor);
于 2013-05-09T16:37:28.703 回答