2016-03-19 10 views
0

Ich habe versucht, herauszufinden, wie die Dauer von dismissViewControllerAnimated(true, completion: nil) zu erhöhen, aber nicht scheint, eine Antwort in Apples documentation zu finden. Mein View-Controller wird mit einer Animation von unten nach oben angezeigt und verhält sich in umgekehrter Reihenfolge, wenn er ausgeblendet wird. Ich möchte, dass die Animation langsamer ist, sagen wir 0,5 Sekunden, irgendwelche Vorschläge?Dauer erhöhen von disappearViewControllerAnimated()

Antwort

2

Sie individuelle Übergänge für Ihre View-Controller verwenden. Bitte haben Sie einen Blick auf diese wunderbare Tutorial zum Einstieg: http://www.appcoda.com/custom-view-controller-transitions-tutorial/

den Hauptcode hier im Falle Link Hinzufügen in Zukunft entfernt wird:

Erstellen Sie eine neue Klasse namens CustomPresentAnimationController und es eine Unterklasse von NSObject machen. Klasse CustomPresentAnimationController: NSObject, UIViewControllerAnimatedTransitioning

UIViewControllerAnimatedTransitioning Protokoll verfügt über zwei erforderliche Methoden, die wir als nächstes hinzufügen werden. Fügen Sie der Klasse die folgenden Methoden hinzu.

func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval { 
     return 2.5 
    } 

    func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 

    let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)! 
    let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)! 
    let finalFrameForVC = transitionContext.finalFrameForViewController(toViewController) 
    let containerView = transitionContext.containerView() 
    let bounds = UIScreen.mainScreen().bounds 
    toViewController.view.frame = CGRectOffset(finalFrameForVC, 0, bounds.size.height) 
    containerView.addSubview(toViewController.view) 

    UIView.animateWithDuration(transitionDuration(transitionContext), delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.0, options: .CurveLinear, animations: { 
     fromViewController.view.alpha = 0.5 
     toViewController.view.frame = finalFrameForVC 
     }, completion: { 
      finished in 
      transitionContext.completeTransition(true) 
      fromViewController.view.alpha = 1.0 
    })} 

Nachdem der Animationscontroller abgeschlossen ist, müssen wir ihn mit einem Storyboard-Segment verknüpfen. Öffnen Sie die Datei ItemsTableViewController.swift und ändern Sie die Klassendeklaration wie gezeigt.

class ItemsTableViewController: UITableViewController, UIViewControllerTransitioningDelegate { 

Fügen Sie diese innerhalb dieser Klasse segue zu handhaben:

let customPresentAnimationController = CustomPresentAnimationController() 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "showAction" { 
     let toViewController = segue.destinationViewController as UIViewController 
     toViewController.transitioningDelegate = self 
    } 
} 

Fügen Sie die folgende UIViewControllerTransitioningDelegate Methode zur Klasse. Dadurch wird die Instanz unseres benutzerdefinierten Animations-Controllers zurückgegeben.

func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
    return customPresentAnimationController 
} 

Alle Gutschriften an den ursprünglichen Autor des Artikels.

0

Man könnte so etwas wie dies versuchen:

CATransaction.begin() 
CATransaction.setAnimationDuration(2.0) 
dismissViewControllerAnimated(true, completion: nil) 
CATransaction.commit() 
+0

Nein, hat nicht funktioniert. @ Jelly – Percolator

+0

In diesem Fall denke ich, die einzige Lösung ist eine benutzerdefinierte Animation zu implementieren. – Jelly