Presione segue en xcode sin animación

Estoy usando storyboarding y push segues en xcode, pero quiero tener segues que solo aparezcan en la vista siguiente, no deslice la vista siguiente (como cuando usa una barra de tabs y aparece la siguiente vista).

¿Existe una forma sencilla y agradable de hacer que los segmentos de inserción normales simplemente “aparezcan” y no “se deslicen”, sin la necesidad de agregar segmentos personalizados?

Todo está funcionando completamente bien, solo quiero eliminar esa animación de diapositivas entre las vistas.

Pude hacer esto creando un segue personalizado (basado en este enlace ).

  1. Crea una nueva clase segue (mira a continuación).
  2. Abra su Storyboard y seleccione el segue.
  3. Establezca la clase en PushNoAnimationSegue (o lo que sea que haya decidido llamar).

Especifique la clase segue en Xcode

Swift 4

 import UIKit /* Move to the next screen without an animation. */ class PushNoAnimationSegue: UIStoryboardSegue { override func perform() { self.source.navigationController?.pushViewController(self.destination, animated: false) } } 

C objective

PushNoAnimationSegue.h

 #import  /* Move to the next screen without an animation. */ @interface PushNoAnimationSegue : UIStoryboardSegue @end 

PushNoAnimationSegue.m

 #import "PushNoAnimationSegue.h" @implementation PushNoAnimationSegue - (void)perform { [self.sourceViewController.navigationController pushViewController:self.destinationViewController animated:NO]; } @end 

Puede desmarcar “Animates” en Interface Builder para iOS 9

enter image description here

¡La respuesta de Ian funciona genial!

Aquí hay una versión Swift de Segue, si alguien necesita:

PushNoAnimationSegue.swift

 import UIKit /// Move to the next screen without an animation. class PushNoAnimationSegue: UIStoryboardSegue { override func perform() { let source = sourceViewController as UIViewController if let navigation = source.navigationController { navigation.pushViewController(destinationViewController as UIViewController, animated: false) } } } 

Ahora he logrado hacer esto usando el siguiente código:

 CreditsViewController *creditspage = [self.storyboard instantiateViewControllerWithIdentifier:@"Credits"]; [UIView beginAnimations:@"flipping view" context:nil]; [UIView setAnimationDuration:0.75]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:YES]; [self.navigationController pushViewController:creditspage animated:NO]; [UIView commitAnimations]; 

¡Espero que esto ayude a alguien más!

Aquí está la versión de Swift adaptada para presentar modalmente un ViewController sin animación:

 import UIKit /// Present the next screen without an animation. class ModalNoAnimationSegue: UIStoryboardSegue { override func perform() { self.sourceViewController.presentViewController( self.destinationViewController as! UIViewController, animated: false, completion: nil) } } 

Para cualquiera que use Xamarin iOS, su clase de segue personalizada debe verse así:

 [Register ("PushNoAnimationSegue")] public class PushNoAnimationSegue : UIStoryboardSegue { public PushNoAnimationSegue(IntPtr handle) : base (handle) { } public override void Perform () { SourceViewController.NavigationController.PushViewController (DestinationViewController, false); } } 

No olvide que aún necesita establecer una secuencia personalizada en su story board y establecer la clase en la clase PushNoAnimationSegue.

responder usando Swift3

para segue “push”:

 class PushNoAnimationSegue: UIStoryboardSegue { override func perform() { source.navigationController?.pushViewController(destination, animated: false) } } 

para la transición “modal”:

 class ModalNoAnimationSegue: UIStoryboardSegue { override func perform() { self.source.present(destination, animated: false, completion: nil) } } 

Para mí, la forma más fácil de hacerlo es:

 UIView.performWithoutAnimation { self.performSegueWithIdentifier("yourSegueIdentifier", sender: nil) } 

Disponible desde iOS 7.0

Estoy usando Visual Studio w / Xamarin, y el diseñador no proporciona la marca de “Animates” en la respuesta de dtochetto.

Tenga en cuenta que el diseñador de XCode aplicará el siguiente atributo al elemento segue en el archivo .storyboard: animates = “NO”

Edité manualmente el archivo .storyboard y agregué animaciones = “NO” a los elementos segue, y funcionó para mí.

Ejemplo:

   

EMPUJE SIN ANIMACIÓN: Swift Aquí está lo que funcionó para mí.

 import ObjectiveC private var AssociatedObjectHandle: UInt8 = 0 extension UIViewController { var isAnimationRequired:Bool { get { return (objc_getAssociatedObject(self, &AssociatedObjectHandle) as? Bool) ?? true } set { objc_setAssociatedObject(self, &AssociatedObjectHandle, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } } -------------------- SilencePushSegue -------------------- class SilencePushSegue: UIStoryboardSegue { override func perform() { if self.source.isAnimationRequired == false { self.source.navigationController?.pushViewController(self.destination, animated: false) }else{ self.source.navigationController?.pushViewController(self.destination, animated: true) } } } 

Uso : establece la clase segue del guión gráfico como se muestra en la imagen. establezca el valor isAnimationRequired de su viewcontroller en falso desde donde desea llamar a performSegue, cuando desee pulsar segue sin animación y volver a establecerlo en true después de llamar a self.performSegue. La mejor de las suertes….

 DispatchQueue.main.async { self.isAnimationRequired = false self.performSegue(withIdentifier: "showAllOrders", sender: self); self.isAnimationRequired = true } 

establece la clase segue del guión gráfico como se muestra en la imagen.

Simplemente configure falso animated en UINavigationController.pushViewController en Swift

 self.navigationController!.pushViewController(viewController, animated: false)