上下文是我正在尝试将一系列温度绘制为图表。
目前我的应用程序的工作原理如下(据我所知):
应用程序打开,使用 openfile 初始化我的文档类,将修改后的 csv 文件读取到 NSString“fileContents”中,然后将其分成一个字符串数组,每个字符串包含没有分隔符或空格的值。如下:
NSArray *temps = [fileContents componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"\n|\r"]];
之后,我初始化我的自定义 View ,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;
}
}
为什么不起作用?的定义不起作用:应用程序编译并运行,但我有一个空白窗口。
还请指出其中存在的任何菜鸟错误,但不会影响代码,因为我仍处于学习阶段。
最佳答案
除非有事件的图形上下文,否则不会进行绘图。我假设上面的 drawpath
方法位于 NSView 子类中 - 在那里你需要重写一个名为 drawRect:
的方法 - 它甚至可能已作为当你创建子类时 stub ?
当 View 需要自行绘制时,Cocoa 会调用此方法。这意味着,当它被调用时,将设置一个图形上下文,并且您所做的绘图代码将实际显示在屏幕上。
只需从 drawRect:
内部调用您的 drawpath
方法,您就应该看到您的线条。
要记住的一般要点是,您自己不会调用任何绘图代码(除了在 drawRect:
内) - 您可以将 View 标记为需要显示 ([myView setNeedsDisplay:YES ];
,或者让系统自己完成。
关于objective-c - 为什么这不会画一条路?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8342131/