Necesito deshabilitar la animación que se reproduce cuando se cambia la orientación. Es esto posible? Si no, es posible acelerarlo?

Solo para aclarar, yo no quiero detener el cambio de orientación, sólo la animación. Quiero una instantánea de cambio de la orientación.

5 Comentarios

  1. 2

    Si no recuerdo mal (que este es el tipo de cosa que tengo que jugar con el por un momento para llegar a la derecha) willRotateToInterfaceOrientation:duration: y willAnimateRotationToInterfaceOrientation:duration: están dentro de la animación bloque, mientras que didRotateFromInterfaceOrientation: se ejecuta después de la animación de bloque. Creo que usted necesita para exponer sus puntos de vista en willRotate para que aparezcan en la posición en la que aparecerían después de la rotación no se habían girado (si es que tiene sentido). De esta manera la animación de animarlas a partir de su original (correcta) de diseño para el nuevo (girado) el diseño en la dirección opuesta a la que el dispositivo gira, creando la apariencia de que no hay ninguna animación. Una vez que la rotación es completa, puede exponer sus puntos de vista, sin animación, en didRotate, dando la impresión de que se gire al instante.

    Claro como el barro, no?

    • por desgracia esta es obsoleto en iOS 8+
  2. 48

    Sí, es posible desactivar la animación, sin romper todo lo demás.

    Los siguientes códigos de desactivar la «caja negra» de la rotación de la animación, sin jugar con otras animaciones o la orientación de código:

    - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
        [UIView setAnimationsEnabled:YES];
    }
    
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        [UIView setAnimationsEnabled:NO];
      /* Your original orientation booleans*/
    
        return TRUE;
    }

    Lugar en su UIViewController y todo debería estar bien. El mismo método puede ser aplicado a cualquier indeseado de animación en iOS.

    Mejor de la suerte con su proyecto.


    Para 2016, parece shouldAutorotateToInterfaceOrientation no está disponible para ser reemplazado. La siguiente no parece funcionar, y no causa ningún otro daño.

    //these DO SEEM TO WORK, 2016
    override func willRotateToInterfaceOrientation(
            toInterfaceOrientation:UIInterfaceOrientation, duration:NSTimeInterval)
        {
        UIView.setAnimationsEnabled(false)
        super.willRotateToInterfaceOrientation(toInterfaceOrientation,duration:duration)
        }
    override func didRotateFromInterfaceOrientation(
            fromInterfaceOrientation:UIInterfaceOrientation)
        {
        super.didRotateFromInterfaceOrientation(fromInterfaceOrientation)
        UIView.setAnimationsEnabled(true)
        }

    Sin embargo!! De hecho, estas dos funciones están en desuso. viewWillTransitionToSize ahora se ocupa tanto de los de «antes» y «después».

    override func viewWillTransitionToSize(size:CGSize,
           withTransitionCoordinator coordinator:UIViewControllerTransitionCoordinator)
        {
        coordinator.animateAlongsideTransition(nil, completion:
            {_ in
            UIView.setAnimationsEnabled(true)
            })
        UIView.setAnimationsEnabled(false)
        super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator);
        }
    • Este es un truco útil. Gracias!
    • No hay problema. Su utilidad en muchos lugares donde usted desea que el defecto animaciones ido.
    • Me gustaría que este trabajó para mí…
    • No trabajo para mí…, pero añadiendo a willRotateToInterfaceOrientation hizo el trabajo.
    • FWIW, aquellos que ahora están en desuso. Ver editar!
    • por desgracia esta es obsoleto en iOS 8+

  3. 12

    En iOS8 puede deshabilitar las animaciones de rotación mediante la desactivación de CALayer animaciones en el controlador de vista de la implementación de viewWillTransitionToSize.

    La inversa de la rotación mencionado en el aceptado respuesta es útil si desea personalizar la transición (véase la WWDC 2014 ‘Controlador de Vista de los Avances en iOS 8’), pero no si usted solo quiere evitar la animación.

    (N. B. la Aplicación de viewWillTransitionToSize va a prevenir el desuso de pre-iOS8 rotación de la Api de ser llamado.)

    - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
    {
        [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
        [CATransaction begin];
        [CATransaction setDisableActions:YES];
        [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
            //You could make a call to update constraints based on the
            //new orientation here.
        } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
            [CATransaction commit];
        }];
    }
    • esto funciona extrañamente sólo para el iPhone, en el iPad de rotación de la pantalla es el sistema de animación 🙁
    • Es deshabilitar la animación, no Es útil.
  4. 3

    Basado en Nils Munch la Respuesta, este es el Swift 3 versión:

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        coordinator.animate(alongsideTransition: nil) { (_) in
            UIView.setAnimationsEnabled(true)
        }
        UIView.setAnimationsEnabled(false)
        super.viewWillTransition(to: size, with: coordinator)
    }
  5. 0

    si usted re-diseño de sus puntos de vista cuando la vista está a punto de girarse creo que cuando realmente gira no tienen animaciones.
    Quiero decir, escribir un método con las nuevas coordenadas, los marcos, las posiciones para cada subvista y llamar a ese método en willRotateToInterfaceOrientation:duration: o willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
    (Esto no es una manera inteligente de hacer las cosas bien. Me pregunto, ¿por qué usted no necesita ninguna-de la animación?)

    • Estoy manualmente el cambio de orientación en un modal de controlador de vista. Cuando me descartar el modal de controlador de vista quiero que la orientación que ya han cambiado.
    • A continuación, puedes probar a configurar su controlador principal de no girar justo antes de que el modal de controlador de vista aparece. A continuación, mostrar sus modales vista controlador(tal vez gire primero), lo ocultan, y el controlador principal debe ser igual que antes. Yo creo. O tal vez de intentar jugar con este tipo de conbinations
    • Usted entiende mal. El padre de la vista sólo permite una orientación. El modal vista tiene un botón que permite seleccionar la orientación. Por ejemplo: el padre está en el retrato, se abre el modal ver y seleccionar paisaje. El modal despide y el padre de la vista se va a la orientación horizontal. Todo esto funciona, pero la animación es torpe y me gustaría deshacerse de él. Me gustaría que el padre de la vista que ya se han cambiado de orientación cuando el modal ver despide.

Dejar respuesta

Please enter your comment!
Please enter your name here