Sposta il seguito in xcode senza animazione

Sto usando lo storyboarding normale e spingo i folletti in xcode, ma voglio avere dei segui che compaiano solo la vista successiva, non far scorrere la vista successiva (come quando usi una barra delle tabs e appare la vista successiva).

C’è un modo semplice per avere normali folletti di push solo “apparire” e non “slide”, senza bisogno di aggiungere segui personalizzati?

Tutto funziona perfettamente, voglio solo rimuovere l’animazione della diapositiva tra le visualizzazioni.

Sono stato in grado di farlo creando un seguito personalizzato (basato su questo link ).

  1. Crea una nuova class di seguito (vedi sotto).
  2. Apri lo Storyboard e seleziona i seguiti.
  3. Imposta la class su PushNoAnimationSegue (o qualsiasi altra cosa tu decida di chiamarla).

Specifica la classe segue in 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) } } 

Obiettivo C

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 

Puoi deselezionare “Anima” in Interface Builder per iOS 9

inserisci la descrizione dell'immagine qui

La risposta di Ian funziona alla grande!

Ecco una versione Swift del Segue, se qualcuno ha bisogno di:

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) } } } 

Ora sono riuscito a farlo usando il seguente codice:

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

Spero che questo aiuti qualcun altro!

Ecco la versione di Swift adattata per presentare modalmente un ViewController senza animazione:

 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) } } 

Per chiunque usi Xamarin iOS, la tua class personalizzata segue deve essere simile a questa:

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

Non dimenticare che hai ancora bisogno di impostare una sequenza personalizzata nella tua story board e impostare la class sulla class PushNoAnimationSegue.

rispondi usando Swift3

per “push” segue:

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

per i seguenti passaggi “modali”:

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

Per me, il modo più semplice per farlo è:

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

Disponibile da iOS 7.0

Sto usando Visual Studio con Xamarin e il designer non fornisce il segno di spunta “Animati” nella risposta di dochochetto.

Si noti che il progettista XCode applicherà il seguente attributo all’elemento segue nel file .storyboard: animates = “NO”

Ho modificato manualmente il file .storyboard e aggiunto animates = “NO” agli elementi segui, e ha funzionato per me.

Esempio:

   

PUSH SENZA ANIMAZIONE: Swift Ecco cosa ha funzionato per me.

 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) } } } 

Utilizzo : imposta la class segue dallo storyboard come mostrato in figura. imposta isAnimationRequired dal tuo viewcontroller a false da dove vuoi chiamare performSegue, quando vuoi spingere segue senza animazione e torna a true dopo aver chiamato self.performSegue. Buona fortuna….

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

imposta la classe segue dallo storyboard come mostrato in figura.

Basta impostare false animated su UINavigationController.pushViewController in Swift

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