我是iPhone / Objective-C开发的新手。我“跳了起来”,开始阅读并实施O'Reilly的iPhone开发中的一些章节。我正在严格遵循电子书的代码,我的代码产生了以下错误:
CGContextSetFillColorWithColor: invalid context
CGContextFillRects: invalid context
CGContextSetFillColorWithColor: invalid context
CGContextGetShouldSmoothFonts: invalid context
但是,当我下载同一章的示例代码时,代码是不同的。
图书代码:
- (void) Render {
CGContextRef g = UIGraphicsGetCurrentContext();
//fill background with gray
CGContextSetFillColorWithColor(g, [UIColor grayColor].CGColor);
CGContextFillRect(g, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height));
//draw text in black.
CGContextSetFillColorWithColor(g, [UIColor blackColor].CGColor);
[@"O'Reilly Rules!" drawAtPoint:CGPointMake(10.0, 20.0) withFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]];
}
网站上的实际项目代码(作品):
- (void) Render {
[self setNeedsDisplay]; //this sets up a deferred call to drawRect.
}
- (void)drawRect:(CGRect)rect {
CGContextRef g = UIGraphicsGetCurrentContext();
//fill background with gray
CGContextSetFillColorWithColor(g, [UIColor grayColor].CGColor);
CGContextFillRect(g, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height));
//draw text in black.
CGContextSetFillColorWithColor(g, [UIColor blackColor].CGColor);
[@"O'Reilly Rules!" drawAtPoint:CGPointMake(10.0, 20.0) withFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]];
}
使这些应用程序正确渲染的代码行是什么?
- (void) Render {
[self setNeedsDisplay]; //this sets up a deferred call to drawRect.
}
- (void)drawRect:(CGRect)rect {
提前感谢帮助新手!
答案 0 :(得分:1)
当你在屏幕上绘制内容时,你需要有一个图形上下文(我确定你已经阅读了所有内容),但这只是在Cocoa调用-drawRect:时提供(或多或少),所以你的选项基本上只是在-drawRect:中调用渲染,从你想要做的事情看起来没有多大意义,或者让-render告诉系统你想要绘制你的视图,这将导致系统(最终)创建一个图形上下文并调用你的-drawRect:,其中需要实际的绘图代码。否则,将不会绘制图形上下文,我相信这是你的错误所说的。
(注意:上面的系统意味着与操作系统一样多的UIKit)