Cambia vista su una sola scheda in Tabbar-Application (Paesaggio-Portrait)?
-
19-09-2019 - |
Domanda
Come posso modificare la visualizzazione quando si ruota l'iPhone (cambiamento del pennino). Ma dovrebbe accade solo in una singola scheda! Ho provato con:
- (void)viewDidLoad {
LandscapeViewController *viewController = [[LandscapeViewController alloc]
initWithNibName:@"LandscapeView" bundle:nil];
self.landscapeViewController = viewController;
[viewController release];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification object:nil]; }
- (void)orientationChanged:(NSNotification *)notification
{
[self performSelector:@selector(updateLandscapeView) withObject:nil afterDelay:0];
}
- (void)updateLandscapeView
{
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView)
{
[self presentModalViewController:self.landscapeViewController animated:YES];
isShowingLandscapeView = YES;
}
else if (deviceOrientation == UIDeviceOrientationPortrait && isShowingLandscapeView)
{
[self dismissModalViewControllerAnimated:YES];
isShowingLandscapeView = NO;
}
}
Ma poi il paesaggio-View appare in tutte le schede. (Quando questo codice viene caricata una volta). Qualche idea?
Soluzione 3
Serbatoi per i vostri commenti! Ho trovato una soluzione:
//Remove Observer if not in Landscape
- (void)viewDidDisappear:(BOOL)animated {
if (isShowingLandscapeView == NO) {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
}
}
//Add Observer if not in Landscape
- (void)viewDidAppear:(BOOL)animated {
if (isShowingLandscapeView == NO) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
}
}
Altri suggerimenti
Quello che sta succedendo è il controller di vista sta ricevendo la notifica UIDeviceOrientationDidChangeNotification
ogni volta, se sia o non viene visualizzata la rotazione cambia. Invece provare utilizzando i metodi predefiniti di UIViewController
che sono pensati per rispondere alle rotazioni.
Questo è da (Guida alla programmazione View Controller) Documenti di Apple:
Controllers Tab bar e vista di rotazione
controller barra delle schede supportano un ritratto orientamento per impostazione predefinita e non ruotare per un orientamento orizzontale se tutti vista radice controller supportano un tale orientamento. Quando un orientamento del dispositivo cambiamento avviene, il controller barra delle schede interroga la sua gamma di controller di vista. Se uno di loro non supporta l'orientamento, la barra delle schede Controller non cambia la sua orientamento.
Quindi, io non sono sicuro che il Tab Bar Controller è progettato per ruotare solo per una singola vista.