上下文是我试图将一系列温度绘制成图表。
目前我的申请工作如下(据我所知):
应用程序打开,使用openfile初始化我的文档类,将修改后的csv文件读入NSString“fileContents”,然后将其分成一个字符串数组,每个字符串包含没有单独或空格的值。如下:
NSArray *temps = [fileContents componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"\n|\r"]];
之后我初始化我的自定义视图,即TemperatureGraph类,并立即将数组传递给下面的代码中看到的当前日志。实例ID是最新的。
最后我调用:
[current drawpath];
以下是实例方法:
- (void) drawpath
{
NSBezierPath *program = [NSBezierPath bezierPath];
NSPoint st = NSMakePoint(0, 0);
[program moveToPoint:st];
[program setLineWidth:10];
[program setLineCapStyle:NSRoundLineCapStyle];
[[NSColor blueColor] setStroke];
[program stroke];
NSUInteger a, b;
a = [currentlog count];
b = 0;
while (b <= a) {
NSPoint new;
float x;
x = 5 * b;
new = NSMakePoint(x, [[currentlog objectAtIndex:b] floatValue]);
[program lineToPoint:new];
[program stroke];
b += 6;
}
}
为什么它不起作用?定义不起作用:应用程序编译并运行但我有一个空白窗口。
另外请指出那里的任何新手错误但不影响代码,因为我仍处于学习阶段。
答案 0 :(得分:2)
除非您有活动的图形上下文,否则不会发生绘图。我假设上面的drawpath
方法在NSView子类中 - 在那里你需要覆盖一个名为drawRect:
的方法 - 它甚至可能在你创建子类时被添加为存根?
当视图绘制自己时,Cocoa会调用此方法。这意味着,在调用它时,将设置图形上下文,并且您执行的绘图代码将实际显示在屏幕上。
只需在drawpath
内拨打drawRect:
方法,您就会看到自己的行。
要记住的一般要点是,您不要自己调用任何绘图代码(除了drawRect:
内部 - 您要么将视图标记为需要显示([myView setNeedsDisplay:YES];
),要么让系统执行此操作本身。