objective-c - 为什么这不会画一条路?

标签 objective-c cocoa drawing

上下文是我正在尝试将一系列温度绘制为图表。

目前我的应用程序的工作原理如下(据我所知):

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

相关文章:

iphone - 如何设置iPhone中特定部分的编辑是"is"

objective-c - 在 Core Data 数据模型中有效地存储相同的数据

ios - 通过 segue 传回 NSNumber

objective-c - 接受 iPhoto 或 Aperture 的拖放

objective-c - NSTimer 作为闹钟

html5 - 如何检查在 Canvas 上绘制的形状?

javascript - 在绘制之前剪裁上下文可以帮助提高 HTML5 Canvas 性能吗?

iphone - 使用 Xcode for iPhone dev 将字符串写入文本文件

c++ - Cocoa 和 Objective-C++

python - 在Python循环下访问迭代列表中的所有元素