0

我有一个使用 NSBezierPath 进行绘图的窗口,有一个带有滑块的单独窗口,并且希望在滑块移动时更新绘图。是否需要每个窗口的单独子类和单独的对象?在这种情况下,做网点和文件所有者的正确方法是什么?

在这种情况下,我有两个窗口连接到一个班级。窗口不会更新绘图,但带有滑块的窗口会被绘制到上面。我不明白为什么它将自我与发件人混淆。发件人是滑块。

- (IBAction)branchSliderChange:(id)sender {
    numberofbranches = [ _branchSlider intValue ] ;
    [_branchLabel setIntegerValue: numberofbranches ];
    [self drawRect:self.bounds];
    [self setNeedsDisplay:YES];
}
4

1 回答 1

1

首先,你永远不会调用drawRect:Cocoa 调用的那个。您只需指明何时需要绘制setNeedsDisplay:.

对等视图(窗口)不相互交谈。他们要么通过控制器交谈,要么通过模型交谈。模型是保存所有视图表示的数据的对象。模型对象与 UI(视图)和控制器是分开的。

例如,如果您的滑块修改了当前颜色,滑块的控制器将更新您的模型以指示当前颜色。滑块(及其控制器)不应该关心这是否会导致在其他视图中绘图;那不关他们的事。然后,绘图视图的控制器应该观察模型更改(通过 KVO、通知、委托),并相应地更新其视图。

如果多个视图共享一个控制器并且信息不会影响该控制器之外的任何内容,则更改可能不会一直向下传递到模型。控制器可能只是更新它控制的所有内容。但是在您的情况下,如果有另一个窗口,则可能涉及多个控制器,因此您可能需要将其存储在模型类中。

请参阅Objective-C 编程指南中的概念中的模型-视图-控制器。这是 Cocoa 开发中最重要的概念之一,所以你要确保你理解它。

于 2013-02-13T07:39:38.030 回答