2012-04-23 97 views
0

我是一個Objective-C/Cocoa新手,我想知道你是否可以向我提供關於我寫的第一個Mac OS X桌面應用程序的一些指導。窗口,視圖和子視圖創建 - mac os x

模型部分是自組織映射算法SOM(Kohonen,1982)。

從界面的角度來看,這個想法是有一個包含1024x768父視圖和192個64x64方塊(子視圖)的主窗口。子視圖的顏色將隨着SOM算法的運行而改變。在建立SOM後,用戶將能夠通過點擊它來聆聽映射到特定方格的聲音。

SOM算法已經實現,但我很難創建接口並將其連接到模型部分。

我想創建窗口的使用下面的代碼:

NSRect windowRect = NSMakeRect(0.0f, 0.0f, 1024.0f, 790.0f); 

NSWindow *window = [[NSWindow alloc] initWithContentRect:windowRect 
               styleMask:(NSResizableWindowMask |   NSClosableWindowMask | NSTitledWindowMask) 
               backing:NSBackingStoreBuffered defer:NO]; 

[window setBackgroundColor:[NSColor blueColor]];  

[window makeKeyAndOrderFront:nil]; 

然後我會創建主主視圖中添加爲我的窗口內容視圖的子視圖:

NSView *view = [[NSView alloc] init]; 

[window setContentView: view] 

最後,我會創建子視圖並將它們添加爲父視圖的子視圖:

for(int i=0;i<12;i++) 
{ 
    for(int j=0;j<16;j++) 
    { 
     NSView *child = [[NSView alloc]initWithFrame:CGRectMake(64*i,64*j,64, 64)]; 
     [view addSubview:child]; 
    } 
} 

我的問題是:

1)我的想法是否有意義?

2)這些代碼段應該去哪裏?我仍然懷疑它們應該成爲AppDelegate還是ViewController的一部分?

3)什麼需要添加到主要的方法來加載接口?目前主要方法只調用涉及音頻處理和SOM算法的方法。我想這裏的一般問題是如何連接模型和視圖部分。

對於那些天真的問題,我很抱歉,並且提前感謝您提出任何有助於我取得進展的想法。

謝謝。

回答

1

可可的意見有點貴。蘋果不鼓勵使用它們。 192正在推動它。另外,如果視圖只是彩色的矩形,那麼僅僅爲此使用整個視圖對象是沒有意義的。只需定義一個自定義視圖,在其中繪製彩色方塊並處理點擊。

此外,您不需要分配標準NSView並將其設置爲窗口的內容視圖。該窗口以標準NSView作爲內容視圖開始。您通常只設置內容視圖如果)它比某種標準NSView(子類以外的內容)或b)它已經建立了子視圖的層次結構,並要交換的是英寸

關於你問題3,我會說你需要遵循Cocoa應用程序的標準設計。 main()函數應該遵循新的Cocoa應用程序項目提供的模板。它通常應該只需撥打NSApplicationMain()。然後,添加自定義代碼的好地方就是應用程序代理的-applicationDidFinishLaunching:方法。 (我不知道你是否認爲你的應用是基於文檔的,如果是這樣的話,那麼設計會有所不同。你會定義你的文檔類和文檔窗口,並且框架會在啓動時打開一個新窗口。)

+0

謝謝你的回答。假設我只有6個子視圖,而不是192.父視圖是否是窗口的內容視圖?一個NSViewController是否足以管理子視圖的實例化? – user1352042 2012-04-25 18:29:22

+0

如果你喜歡,那麼,當然,你可以添加6個子視圖到窗口內容視圖。一個'NSViewController'通常管理一個單一的視圖,它可能是一個層次結構的根。如果您打算將網格視圖封裝到單獨的NIB中,那麼讓視圖控制器擁有並加載該NIB是有意義的。如果你的網格幾乎是一次性的,只能用於一個窗口,那麼你只需要一個窗口控制器來控制窗口內的所有內容。 – 2012-04-25 20:19:09