¿Cambiar vista en una sola pestaña en la barra de pestañas-Aplicación (Paisaje-Retrato)?

StackOverflow https://stackoverflow.com/questions/2223081

Pregunta

¿Cómo puedo cambiar la vista al girar el iPhone (cambiar las puntas)?¡Pero solo debería ocurrir en una sola pestaña!Lo probé 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;
    }    
}

Pero luego aparece la vista horizontal en todas las pestañas.(Cuando este código se carga una vez).¿Alguna idea?

¿Fue útil?

Solución 3

Los tanques por tus comentarios! He encontrado una solución:

//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];
    }
}

Otros consejos

Lo que pasa es que su controlador de vista está recibiendo la notificación UIDeviceOrientationDidChangeNotification siempre, si es o no se están visualizando los cambios de rotación. En lugar de tratar utilizando los métodos incorporados de UIViewController que están destinados para responder a las rotaciones.

http://tinyurl.com/ycb8of2

Esto es de los documentos de Apple (Ver guía de programación del controlador):

Controladores de barra de pestañas y rotación de vista

Los controladores de la barra de pestañas admiten una orientación del retrato de forma predeterminada y no giran a una orientación del paisaje a menos que todos los controladores de vista de raíz admitan dicha orientación.Cuando se produce un cambio de orientación al dispositivo, el controlador de la barra de pestaña consulta su variedad de controladores de vista.Si alguno de ellos no admite la orientación, el controlador de la barra de pestañas no cambia su orientación.

Por lo tanto, no estoy seguro de que el controlador de la barra de pestañas esté diseñado para girar solo para una vista única.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top