2012-04-23 3 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

Вид на какао несколько дороже. Apple обескураживает использование очень большого количества из них. 192 толкает его. Кроме того, если в представлениях будут только цветные прямоугольники, нет смысла использовать для этого весь объект вида. Просто определите одно пользовательское представление, которое рисует цветные квадраты внутри него и обрабатывает клики.

Кроме того, вам не нужно выделять стандарт NSView и устанавливать его как просмотр содержимого окна. Окно начинается со стандартного NSView в виде содержимого. Обычно вы только устанавливаете представление содержимого, если: a) это нечто иное, чем стандарт NSView (какой-то подкласс) или b) он имеет уже установленную иерархию подзаголовков, и вы хотите поменять ее.

Относительно вашего вопрос 3, я бы сказал, что вам нужно следовать стандартным проектам приложения Cocoa. Функция main() должна следовать шаблону, представленному новым проектом приложения Cocoa. Обычно он должен просто позвонить NSApplicationMain(). Тогда хорошим местом для добавления вашего пользовательского кода будет метод -applicationDidFinishLaunching: делегата приложения. (Я не знаю, понимаете ли вы свое приложение как основанное на документе. Если это так, то дизайн будет несколько иным.Вы бы определили свой класс документа и окно документа, и в процессе запуска он позаботился о том, чтобы открыть новый.)

+0

Благодарим вас за ответ. Предположим, что у меня будет только 6 subviews вместо 192. Будет ли parentView быть contentView окна? Достаточно ли одного NSViewController для управления созданием субстранов? – user1352042

+0

Если вам нравится, то, конечно, вы могли бы добавить 6 подзонов в представление содержимого окна. «NSViewController» обычно управляет одним представлением, которое может быть корнем иерархии. Если вы собираетесь инкапсулировать представление сетки в отдельный NIB, тогда имеет смысл иметь собственный контроллер представления и загрузить этот NIB. Если вы сетка в значительной степени одноразовая, которая будет использоваться только с одним окном, тогда вы можете просто иметь оконный контроллер для управления всем в окне. –

Смежные вопросы