2016-04-20 9 views
1

Ich bin mit Swift erstellen eine iOS-App, und ich möchte benutzerdefinierte Übergänge, die von rechts nach links übergänge erstellen. Der Standard-Übergangsweg ist von links nach rechts, aber ich muss den umgekehrten Weg des Übergangs haben. Ich habe den Code einfach so geschrieben.Ist es möglich, Custom Segue, die Übergänge von rechts nach links zu erstellen

class RightToLeftSegue: UIStoryboardSegue { 

    override func perform() { 
     let sourceViewController = self.sourceViewController 
     let destinationViewController = self.destinationViewController 

     let window = UIApplication.sharedApplication().keyWindow 
     window!.rootViewController = destinationViewController 
     window!.rootViewController = sourceViewController 
     UIView.transitionWithView(window!, duration: 0.5, options: .TransitionFlipFromLeft, animations: { window!.rootViewController = destinationViewController }, completion: { (finished: Bool) in }) 
    } 
} 

Aber das geht einfach umdrehen Bewegung. Kann ich das irgendwie machen? Vielen Dank!

Antwort

2

Versuchen Sie, diese

class RightToLeftSegue : UIStoryboardSegue { 

    override func perform() { 

     guard let navigationController = sourceViewController.navigationController else { return } 

     sourceViewController.view.superview?.addSubview(destinationViewController.view) 

     let frame = sourceViewController.view.frame 
     destinationViewController.view.frame = CGRectOffset(frame, -frame.size.width, 0.0) 

     UIView.animateWithDuration(0.5, 
     animations: { 
      self.sourceViewController.view.frame = CGRectOffset(frame, frame.size.width, 0.0) 
      self.destinationViewController.view.frame = frame 
     }) 
     { (finished: Bool) in 
      navigationController.rootViewController = self.destinationViewController 
     } 

    } 

} 

EDIT

Oder dieses!

class RightToLeftSegue : UIStoryboardSegue { 

    override func perform() { 
     sourceViewController.navigationController?.viewControllers = [destinationViewController, sourceViewController] 
     sourceViewController.navigationController?.popViewControllerAnimated(true) 
    } 

} 
+0

Super! Es klappt! Ich habe eine Frage. Wenn die Animation passiert, wird eine leere Seite angezeigt, bevor die Animation abgeschlossen ist. In diesem Fall wird sie für eine Weile schwarz und ich habe window.backgoundColor in Weiß geändert. Aber gibt es eine Möglichkeit, dass ich den destinationViewController als normales Segment anzeigen kann? – Dave

+0

@Dave Nicht sicher, was Ihre Frage ist. Nach der Animation ist der destinationViewController also leer anstatt wie gewünscht? –

+0

Nein, der destinationViewController wird nach Abschluss der Animation angezeigt, aber während der Animation wird nur eine leere Seite angezeigt. – Dave

Verwandte Themen