Cocoa编辑NSBezierPath

时间:2014-12-31 10:08:49

标签: objective-c cocoa nsbezierpath

我在NSView中有一个带有2个元素的简单bezierPath; 我想在按下的按钮上修改最后一个元素(NSPoint),但我的代码在路径上没有任何视觉效果。 这是我在NSView子类中的代码:

    NSBezierPath *path;    
    - (void)drawRect:(NSRect)dirtyRect {
        [super drawRect:dirtyRect];
        // Drawing code here.

        path = [NSBezierPath bezierPath];
        [path moveToPoint:NSMakePoint(0, 0)];
        [path lineToPoint:NSMakePoint(60, 60)];
        [path setLineWith:2.0];
        [[NSColor redColor] set];
        [path stroke]; 
        //the path is correctly drawing and visible
    }

    - (IBAction)buttonPressed:(id)sender {
        NSPoint newPoint = NSMakePoint(120, 120);
        [path setAssociatedPoints:&newPoint atIndex:1]; //has no visible effect
   }

任何建议?

2 个答案:

答案 0 :(得分:1)

每次拨打drawRect:时,您都会创建一条新路径并进行绘制。然后,按下按钮,修改路径。

所以你有两个问题:

  1. 您不断重新创建路径 - 只需在创建视图时创建一次
  2. 路径更新时不重绘视图 - 使用setNeedsDisplay

答案 1 :(得分:0)

每次通过-drawRect:方法重新创建Bezier路径。因此,保留最后一个并修改它并不重要。您将在下次查看视图时丢弃该文件并创建一个新文件。

此外,如果您的变量实际上只是在任何花括号({ ... })之外声明,那么它不是实例变量。它只是一个文件范围的全局变量。这意味着它由此视图类的所有实例共享。