2013-02-13 77 views
0

我有一個使用NSBezierPath進行繪製的窗口,它有一個帶滑塊的獨立窗口,並希望在滑塊移動時更新繪圖。是否需要每個窗口的單獨子類和單獨的對象?在這種情況下做網點和文件所有者的正確方法是什麼?什麼是從一個單獨的窗口更新繪圖的正確方法?

在這種情況下,我有兩個窗口連接到一個類。該窗口不會更新繪圖,但帶滑塊的窗口將被繪製到上面。我不明白爲什麼它讓自己與發件人混淆。發件人是滑塊。

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

回答

1

首先,你永遠不會調用drawRect:,由可可調用。你只需指出什麼時候需要用setNeedsDisplay:來繪製。

同儕意見(窗口)不相互交談。他們或者通過控制器或通過模型進行交談。該模型是包含所有視圖所代表的數據的對象。模型對象與UI(視圖)和控制器是分開的。例如,如果滑塊修改當前顏色,則滑塊控制器將更新您的模型以指示當前顏色。滑塊(及其控制器)不應該在乎是否導致在其他視圖中繪圖;那不是他們的業務。繪圖視圖的控制器應該觀察模型變化(通過KVO,通知,委託),並相應地更新其視圖。

如果多個視圖共享一個控制器,並且該信息不會影響該控制器之外的任何內容,則該更改可能不會一直沿着該模型完成。控制器可能會更新它控制的所有內容。但就你而言,如果有另一個窗口,可能涉及多個控制器,所以你可能需要將它存儲在模型類中。

請參閱Objective-C編程指南概念中的Model-View-Controller。這是Cocoa開發中最重要的概念之一,所以你想確保你理解它。

相關問題