为什么不画这条路呢?

时间:2011-12-01 13:27:01

标签: objective-c cocoa drawing

上下文是我试图将一系列温度绘制成图表。

目前我的申请工作如下(据我所知):

应用程序打开,使用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;
    }
}

为什么它不起作用?定义不起作用:应用程序编译并运行但我有一个空白窗口。

另外请指出那里的任何新手错误但不影响代码,因为我仍处于学习阶段。

1 个答案:

答案 0 :(得分:2)

除非您有活动的图形上下文,否则不会发生绘图。我假设上面的drawpath方法在NSView子类中 - 在那里你需要覆盖一个名为drawRect:的方法 - 它甚至可能在你创建子类时被添加为存根?

当视图绘制自己时,Cocoa会调用此方法。这意味着,在调用它时,将设置图形上下文,并且您执行的绘图代码将实际显示在屏幕上。

只需在drawpath内拨打drawRect:方法,您就会看到自己的行。

要记住的一般要点是,您不要自己调用任何绘图代码(除了drawRect:内部 - 您要么将视图标记为需要显示([myView setNeedsDisplay:YES];),要么让系统执行此操作本身。