可可编辑NSBezierPath



我在 NSView 中有一个简单的 bezierPath,其中包含 2 个元素;我想修改按下按钮上的最后一个元素 (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
   }

有什么建议吗?

每次调用drawRect:时,您都在创建一个新路径并绘制它。然后,在按钮上按下,您可以修改路径。

所以你有 2 个问题:

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

您每次都通过-drawRect:方法重新创建贝塞尔路径。因此,保留最后一个并对其进行修改并不重要。您将丢弃它并在下次绘制视图时创建一个新视图。

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

相关内容

  • 没有找到相关文章

最新更新