窗口,视图和子视图创建 - mac os x

时间:2012-04-23 19:12:25

标签: objective-c macos model-view-controller

我是Objective-C / Cocoa的新手,我想知道你是否可以提供一些关于我正在编写的第一个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];

然后我会创建main将主视图添加为我窗口内容视图的子视图:

 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)需要添加什么来加载接口的主方法?目前,main方法只调用涉及音频处理和SOM算法的方法。我想这里的一般问题是如何连接模型和视图部件。

我为天真的问题道歉,并提前感谢任何有助于我取得进展的想法。

谢谢。

1 个答案:

答案 0 :(得分:1)

可可观点有点贵。 Apple不鼓励大量使用它们。 192正在推动它。此外,如果视图只是彩色矩形,那么仅使用整个视图对象就没有意义了。只需定义一个自定义视图,在其中绘制彩色方块并处理点击。

此外,您无需分配标准NSView并将其设置为窗口的内容视图。窗口以标准NSView作为内容视图开始。您通常只设置内容视图,如果a)它不是标准NSView(某种类的子类)或b)它已经设置了子视图的层次结构,并且您想要交换它。

关于你的问题3,我想说你需要遵循Cocoa应用程序的标准设计。 main()函数应该遵循新的Cocoa应用程序项目提供的模板。它通常应该只调用NSApplicationMain()。然后,添加自定义代码的好地方是应用委托的-applicationDidFinishLaunching:方法。 (我不知道您是否认为您的应用程序是基于文档的。如果是这样,那么设计会有所不同。您将定义文档类和文档窗口,框架将负责打开一个新的在启动时。)