0

我是一个 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];

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

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

对于这些幼稚的问题,我深表歉意,并提前感谢您提出任何有助于我取得进展的想法。

谢谢你。

4

1 回答 1

1

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

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

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

于 2012-04-23T19:59:32.733 回答