Solitamente sto creando app per iOS ma ora sto provando a creare un'app per OS X e mi sento perso all'inizio. Dì lo stile che faccio che le app iOS siano totalmente programmatiche, non ci sono file xib o qualsiasi altro solo perché ho un controllo molto maggiore digitando piuttosto che trascinando. Tuttavia, nella programmazione OS X, inizia con alcuni file xib con le voci di menu e una finestra predefinita. Ci sono un sacco di elementi nelle voci del menu, quindi probabilmente non è qualcosa che voglio gironzolare, ma voglio creare a livello di codice la mia prima finestra da solo.crea in modo programmatico la finestra iniziale dell'app cacao (OS X)
Quindi ho fatto questo:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSUInteger windowStyleMask = NSTitledWindowMask|NSResizableWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask;
NSWindow* appWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(200, 200, 1280, 720) styleMask:windowStyleMask backing:NSBackingStoreBuffered defer:NO];
appWindow.backgroundColor = [NSColor lightGrayColor];
appWindow.minSize = NSMakeSize(1280, 720);
appWindow.title = @"Sample Window";
[appWindow makeKeyAndOrderFront:self];
_appWindowController = [[AppWindowController alloc] initWithWindow:appWindow];
[_appWindowController showWindow:self];
}
Così qui, ho creato una finestra prima, e l'uso che windowController a init questa finestra. La finestra si presenta in questo modo, ma posso solo specificare gli elementi interni, come pulsanti ed etichette qui, ma non nella finestra Controllo. Mi fa sentire male, quindi ho provato un altro modo.
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
_appWindowController = [[AppWindowController alloc] init];
[_appWindowController showWindow:self];
}
e dopo questo voglio impostare gli altri elementi nella funzione loadWindow:
nel windowController come questo:
- (void)loadWindow
{
[self.window setFrame:NSMakeRect(200, 200, 1280, 720) display:YES];
self.window.title = @"Sample window";
self.window.backgroundColor = [NSColor lightGrayColor];
NSButton* sampleButton = [[NSButton alloc] initWithFrame:NSRectFromCGRect(CGRectMake(100, 100, 200, 23))];
sampleButton.title = @"Sample Button!";
[sampleButton setButtonType:NSMomentaryLightButton];
[sampleButton setBezelStyle:NSRoundedBezelStyle];
[self.window.contentView addSubview:sampleButton];
NSLog(@"Loaded window!");
[self.window makeKeyAndOrderFront:nil];
}
Purtroppo, questo non funziona mai. il numero loadWindow:
non viene mai chiamato, né windowDidLoad:
. Dove sono andati?
E per favore non chiedere perché non uso pennini. Vorrei creare alcune viste altamente personalizzate all'interno, possibilmente OpenGL, quindi non credo che i pennini possano gestirle. Sono molto apprezzato se qualcuno potesse aiutare. Grazie.
E inoltre, chi sa come avviare le voci del menu da zero, a livello di programmazione?
Sto usando l'ultimo XCode.
La tua idea che XIBs non può gestire OpenGL è completamente sbagliato. Apple fornisce una vista OpenGL da utilizzare in XIBs. Gli XIB possono gestire tutto ciò che è possibile creare viste programmaticamente, sono un modo semplice per incapsulare quegli elementi. – sosborn
Ciò si adatta in alcuni casi, ma pensa ai giochi da tavolo nelle app iOS. ogni pezzo degli scacchi è una vista con immagini personalizzate, quindi è necessario spostarli. Se la maggior parte delle visualizzazioni nelle finestre è altamente dinamica, con animazioni, è difficile immaginare come potrebbe essere implementata senza creare grossi problemi. – wlicpsc
Se lo stai facendo OpenGL, hai una vista e tutti i pezzi e cosa non viene fatto in OpenGL. Se non lo fai in OpenGL, si applica la stessa idea, puoi avere una superview in te XIB e poi puoi popolare quella vista con le altre viste in modo programmatico. In questo modo si ottengono i vantaggi dell'utilizzo di un XIB mentre si controlla ancora la scheda di gioco in codice. – sosborn