0

我有一个简单的 bezierPath,在 NSView 中有 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
   }

有什么建议吗?

4

2 回答 2

1

每次您打电话时,drawRect:您都在创建一条新路径并绘制它。然后,在按钮上按下您修改路径。

所以你有两个问题:

  1. 您不断重新创建路径 - 只需在创建视图时创建一次
  2. 更新路径时不会重绘视图 - 使用setNeedsDisplay
于 2014-12-31T10:22:07.797 回答
0

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

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

于 2014-12-31T10:22:26.587 回答