he añadido los nuevos métodos para mi código como se describe en las manzanas de iOS 6 Documentaciones pero en el iPhone 5 que la Aplicación no gire al revés. Sólo el paisaje Maneras.

Aquí mi Código de la rootViewController:

- (NSUInteger)supportedInterfaceOrientations{
    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);
    return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft |
            UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown);
}
- (BOOL)shouldAutorotate{
    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);
    return YES;
}

intenté también «UIInterfaceOrientationMaskAll» pero no hay cambios. Lo Extraño es que mi iPhone 4 con iOS6 no totate o al revés, con el mismo código.

Alguna Idea?

5 Comentarios

  1. 61

    IOS 6 se utiliza la Orientación predeterminada UIInterfaceOrientationMaskAllpara iPad y UIInterfaceOrientationMaskAllButUpsideDownpara el iPhone. Si usted quiere que su ViewControllers en el iPhone para rotar a TODAS las orientaciones, incluyendo al revés debe agregar el iOS 6 método:

    -(NSUInteger)supportedInterfaceOrientations
    {
        return UIInterfaceOrientationMaskAll;
    }

    a todos los de la vista de los controladores. Si has hecho esto y no funciona, estoy apostando a su uso de un TabViewController o NavigationController donde algunos de los puntos de vista NO son regresan este. Todos ViewControllers debe devolver esta para CUALQUIERA de ellos para que la apoyen.

    Alternativamente, usted puede agregar una Categoría a la UITabViewController o NavigationController clase que es su rootViewController y reemplazar este método. De hacerlo así:

    @interface UITabBarController (RotationAll)
        -(NSUInteger)supportedInterfaceOrientations;
    @end
    
    @implementation UITabBarController (RotationAll)
    -(NSUInteger)supportedInterfaceOrientations {
        return UIInterfaceOrientationMaskAll;
    }
    @end

    También estos son los recomendados en la actualidad los enfoques que se están discutiendo ahora en los Foros de Desarrolladores Apple con Apple personal de decir antes de documentación que desalentó sub classing de UINavigationController está fuera de fecha, y a partir de iOS 6 está bien hacer eso.

    • +1, solucionado mi problema, pero: necesario para eliminar desde el teléfono anterior a construir también!!!
    • Excelente respuesta.
    • Quizás vale informe a Apple, es confuso que puede establecer Todas las orientaciones en el XML (info.plist), pero es sobrescribir.
    • Ir a por ello amigo. Informe como un error si crees que es un problema. Con algo de retraso a pesar de que, iOS7 a punto de hacer la cocina. Duda alguien en 1 infinite va a prestar mucha atención a iOS 6 quejas 🙂
    • el mismo problema aparece en ios7 así. tal vez todavía vale la pena informar..
    • Sí, pero para muchos otros, las cosas cambiaron, sobre el manejo de la orientación en iOS7.
    • La clave es determinar qué controlador de vista, está en la raíz. En mi caso fue el UINavigationController utilizado por la punta. Una alternativa al uso de una categoría sería hacer una subclase y el conjunto de la punta para el uso que la subclase.
    • Tenga en cuenta que el @interface ya no es necesario, sólo la @implementation.
    • Loco. Pero funcionó para mí en Swift y iOS 8.

  2. 12

    Gracias a Cliff Ribaudo realmente ayuda completa tu respuesta para UITabbarController basado en proyecto, pero en mi caso sólo estoy usando UINavigationController así que he modificado tu respuesta para UINavigationController categeory.

    @interface UINavigationController (RotationAll)
    -(NSUInteger)supportedInterfaceOrientations;
    @end   
    
    
    @implementation UINavigationController (RotationAll)
      -(NSUInteger)supportedInterfaceOrientations {
        return UIInterfaceOrientationMaskAll;
      }
    @end
    • Para las últimas versiones de Xcode usted no necesita el @interface, sólo tener la @implementation obras.
  3. 0

    Perdonar el nivel de detalle, pero creo que tu respuesta es la siguiente.

    Yo estaba teniendo el mismo problema, pero es que estaba ocurriendo en todos IOS 6 para los dispositivos, incluyendo el iphone 4. Leyendo tu pregunta en realidad respondió a la mía. Me había quitado esto hace años porque no estaba haciendo nada:

    - (NSUInteger)supportedInterfaceOrientations{    
        NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);
        return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft |
                UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown); }

    y mi código funciona a la perfección en anteriores versiones de ios. Parece que este se ha convertido en manditory en ios 6. Pero sólo para que al revés. Las otras orientaciones estaban trabajando bien.

    Así que, gracias.

    De regreso a su problema. Has revisado el proyecto de destino para ver si todos los «Interfaz Compatible con Orientaciones» son de color gris oscuro? Me pregunto si al revés, es de color gris claro, (es decir, sin marcar). He encontrado en un test rápido que en anteriores versiones de ios estos se omiten también. Como siempre y cuando regrese SÍ de shouldAutorotateToInterfaceOrientation se prestará apoyo a las orientaciones, pero no en iOS 6.

    Por último, se han implementado shouldAutorotate, que no tengo en mi código. Creo que el valor predeterminado es Sí. Y creo que esto le dice al sistema operativo para tratar de girar, pero entonces usted tiene que decirle que las orientaciones de apoyo con shouldAutorotateToInterfaceOrientation. Pero el fragmento no muestra que se ha implementado shouldAutorotateToInterfaceOrientation. Me gustaría sugerir la implantación de esto, tal como se indica al SO que las orientaciones que apoyar a un simple » SÍ » significa que el apoyo de todos.

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        //Return YES for supported orientations.
        //return (interfaceOrientation == UIInterfaceOrientationPortrait);
        return YES;
    }

    Espero que esto ayude.

  4. 0

    De destino predeterminado ajustes no es al revés de orientación, a fin de tratar este:

    Vaya a archivo de Proyecto
    seleccione la aplicación de destino
    seleccione «Veraniego» ficha
    compruebe que todos los tipos de orientación presionado

    Buena suerte 🙂

  5. 0

    Si usted planea habilitar o deshabilitar la rotación para todos los de la vista de los controladores no es necesario subclase UINavigationController.
    En lugar de utilizar:

       -(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 

    en el AppDelegate.

    Si plan de apoyo a todas las orientaciones en su aplicación, pero diferentes orientaciones de los PADRES de la Vista de los Controladores (UINavigationController pila por ejemplo), usted debe utilizar

       -(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 

    de AppDelegate en combinación con los métodos siguientes en su PADRE Controlador de Vista.

        - (BOOL)shouldAutorotate

    y

    - (NSUInteger)supportedInterfaceOrientations

    Pero si usted planea tener una orientación diferente en la configuración de los diferentes NIÑOS ViewControllers en la misma pila de navegación (como yo) que usted necesita para controlar el ViewController en la pila de navegación.

    He creado el siguiente en mi UINavigationController subclase:

        - (BOOL)shouldAutorotate
    {
        return YES;
    }
    
    - (NSUInteger)supportedInterfaceOrientations
    {
        int interfaceOrientation = 0;
    
        if (self.viewControllers.count > 0)
        {
            id viewController;
            DLog(@"%@", self.viewControllers);
            for (viewController in self.viewControllers)
            {
                if ([viewController isKindOfClass:([InitialUseViewController class])])
                {
                     interfaceOrientation = UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
                }
                else if ([viewController isKindOfClass:([MainViewController class])])
                {
                     interfaceOrientation = UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
                }
                else
                {
                     interfaceOrientation = UIInterfaceOrientationMaskAllButUpsideDown;
                }
            }
        }
        return interfaceOrientation;
    }

    Puesto que usted no puede controlar más de los niños ViewControllers la configuración de rotación de presentado controlador de vista de que de alguna manera debe interceptar controlador de vista de lo que es actualmente en la pila de navegación. Así que eso es lo que hice :). Espero que ayude !

Dejar respuesta

Please enter your comment!
Please enter your name here