gpt4 book ai didi

objective-c - 从单独的窗口更新绘图的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 17:55:08 25 4
gpt4 key购买 nike

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

在本例中,我有两个窗口连接到一个类。窗口不会更新绘图,但带有 slider 的窗口将被绘制到上面。我不明白为什么它会将 self 与发件人混淆。发件人是 slider 。

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

最佳答案

首先,你永远不会调用Cocoa调用的drawRect:。您只需使用 setNeedsDisplay: 来指示何时需要绘制即可。

对等 View (窗口)不会相互交流。他们要么通过 Controller 或通过模型进行对话。模型是保存所有 View 所代表的数据的对象。模型对象与 UI( View )和 Controller 是分开的。

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

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

参见Model-View-Controller在《Objective-C 编程概念指南》中。这是 Cocoa 开发中最重要的概念之一,因此您需要确保理解它。

关于objective-c - 从单独的窗口更新绘图的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14846169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com