[Domanda aggiornata]Qual è il modo corretto per rilevare l'orientamento dell'interfaccia all'avvio?
Quindi ecco il problema, ho finalmente ristretto a questo. Se si crea un nuovo UIViewController in tutti i metodi
- (id)init;
- (void)loadView;
- (void)viewDidAppear:(BOOL)animated;
- (void)viewDidLoad;
(...)
L'interfaceOrientation standard è ritratto e se viene rilevata la modalità orizzontale sarà rapidamente ruotare l'orientamento. Che possono poi essere rilevate utilizzando il:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
Il problema è che sul iPad, è difficile tranquillo per preparare la vostra interfaccia per l'orientamento dell'interfaccia corrente all'interno del loadview (o uno degli altri) come sarà soltanto il ritorno Ritratto. Ciò causerà alcuni problemi:
1) Desidero ricaricare il contenuto in modalità portait, ma NON in modalità orizzontale. Normalmente inserirò un'istruzione if in loadView. Se in modalità verticale, ricarica il contenuto. Ma in questo caso restituirà sempre un ritratto e quindi carica sempre il contenuto.
2) Desidero utilizzare 'presentPopoverFromRect: inView: allowedArrowDirections: animated:' - metodo in modalità verticale per visualizzare automaticamente il menu popover all'avvio dell'applicazione. Ciò causerà il crash dell'applicazione quando viene avviato in modalità verticale. Motivo: "I popover non possono essere presentati da una vista che non ha una finestra.".
L'unica ipotesi sicura è all'interno di "didRotateFromInterfaceOrientation: (UIInterfaceOrientation) fromInterfaceOrientation", ma questo metodo non verrà attivato se si avvia in modalità verticale.
// ----
Aggiornamento (15.37)
'UIApplicationWillChangeStatusBarOrientationNotification'
saranno pubblicati solo quando l'utente swap da verticale a orizzontale (o vice versa). Se l'interfaccia è stato il problema, allora questo può essere facilmente risolto con l'osservazione per la notifica e
if (UIDeviceOrientationIsPortrait(interfaceOrientation)) {
// layout subviews for portrait mode
} else {
// layout subviews for landscape mode
}
Ma il problema è che vorrei sapere in quale modalità è al momento del lancio di determinare piuttosto devo o non devo ricaricare il contenuto , Non riesco a ricaricare il contenuto e quando si passa a landscape lo annullo.
Ho provato a fare il controllo per 'UIDeviceOrientationIsPortrait()' in 'layoutSubviews' di un costume' UIView' sottoclasse e sto ottenendo gli orientamenti corretti. Avete un po 'più codice che potreste condividere che potrebbe aiutare a identificare qual è il problema? Ci si chiede inoltre se i valori UIDeviceOrientation e UIInterfaceOrientation possano essere utilizzati in modo intercambiabile? Questo mi ha fatto rimanere bloccato con strani bug prima d'ora. – justinkmunger