我是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算法的方法。我想这里的一般问题是如何连接模型和视图部件。
我为天真的问题道歉,并提前感谢任何有助于我取得进展的想法。
谢谢。
答案 0 :(得分:1)
可可观点有点贵。 Apple不鼓励大量使用它们。 192正在推动它。此外,如果视图只是彩色矩形,那么仅使用整个视图对象就没有意义了。只需定义一个自定义视图,在其中绘制彩色方块并处理点击。
此外,您无需分配标准NSView
并将其设置为窗口的内容视图。窗口以标准NSView
作为内容视图开始。您通常只设置内容视图,如果a)它不是标准NSView
(某种类的子类)或b)它已经设置了子视图的层次结构,并且您想要交换它。
关于你的问题3,我想说你需要遵循Cocoa应用程序的标准设计。 main()
函数应该遵循新的Cocoa应用程序项目提供的模板。它通常应该只调用NSApplicationMain()
。然后,添加自定义代码的好地方是应用委托的-applicationDidFinishLaunching:
方法。 (我不知道您是否认为您的应用程序是基于文档的。如果是这样,那么设计会有所不同。您将定义文档类和文档窗口,框架将负责打开一个新的在启动时。)