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?

È stato utile?

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.

http://tinyurl.com/ycb8of2

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top