我在 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 个问题:
- 您不断重新创建路径 - 只需在创建视图时创建一次
- 更新路径时不会重绘视图 - 使用
setNeedsDisplay
您每次都通过-drawRect:
方法重新创建贝塞尔路径。因此,保留最后一个并对其进行修改并不重要。您将丢弃它并在下次绘制视图时创建一个新视图。
此外,如果您的变量实际上只是在任何大括号之外声明({
... }
),则它不是实例变量。它只是一个文件范围的全局变量。这意味着它由此视图类的所有实例共享。