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) インターフェイスをロードするメイン メソッドに何を追加する必要がありますか? 現時点では、メイン メソッドはオーディオ処理と SOM アルゴリズムを参照するメソッドのみを呼び出します。ここでの一般的な質問は、モデル パーツとビュー パーツをどのように接続するかということだと思います。

素朴な質問で申し訳ありませんが、私が前進するのに役立つアイデアを事前に感謝します.

ありがとうございました。

4

1 に答える 1

1

ココアビューはやや高価です。Apple は、それらを非常に多く使用することをお勧めしません。192はそれを押しています。また、ビューが単に色付きの長方形になる場合、そのためだけにビュー オブジェクト全体を使用してもほとんど意味がありません。その中に色付きの四角形を描画し、クリックを処理する単一のカスタム ビューを定義するだけです。

NSViewまた、標準を割り当ててウィンドウのコンテンツ ビューとして設定する必要もありません。NSViewウィンドウは、コンテンツ ビューとして標準で始まります。通常、コンテンツ ビューを設定するのは、a) 標準以外のものNSView(何らかのサブクラス) である場合、または b) サブビューの階層が既に設定されていて、それを交換したい場合のみです。

質問 3 については、Cocoa アプリケーションの標準設計に従う必要があると思います。関数はmain()、新しい Cocoa アプリ プロジェクトで提供されるテンプレートに従う必要があります。通常は、 を呼び出すだけNSApplicationMain()です。次に、カスタム コードを追加するのに適した場所-applicationDidFinishLaunching:は、アプリ デリゲートのメソッドです。(アプリをドキュメント ベースと考えているかどうかはわかりません。もしそうなら、デザインは多少異なるでしょう。ドキュメント クラスとドキュメント ウィンドウを定義すると、フレームワークが新しいものを開く処理を行います。起動時。)

于 2012-04-23T19:59:32.733 に答える