2016-04-03 4 views
0

Ich habe ein benutzerdefiniertes Segment erstellt, das die aktuelle Ansicht nach links verschiebt und gleichzeitig die nächste Ansicht von rechts verschiebt. Wenn ich es auf dem ersten Weg benutze, funktioniert es perfekt, aber wenn es auf dem nächsten Weg verwendet wird, bewegt sich nur die Zielansicht. Der Code für die Segue sieht wie folgt aus:Schnelles benutzerdefiniertes Segment funktioniert nicht in aufeinanderfolgenden Segmenten

class CustomSlideSegue: UIStoryboardSegue { 

    override func perform() { 
     let firstVCView = self.sourceViewController.view as UIView! 
     let secondVCView = self.destinationViewController.view as UIView! 

     let screenWidth = UIScreen.mainScreen().bounds.size.width 
     let screenHeight = UIScreen.mainScreen().bounds.size.height 

     secondVCView.frame = CGRectMake(screenWidth, 0, screenWidth, screenHeight) 

     let window = UIApplication.sharedApplication().keyWindow 
     window?.insertSubview(secondVCView, aboveSubview: firstVCView) 

     UIView.animateWithDuration(0.6, animations: {() -> Void in 
      firstVCView.transform = CGAffineTransformMakeTranslation(-screenWidth, 0) 
      secondVCView.transform = CGAffineTransformMakeTranslation(-screenWidth, 0) 
    }) { (Finished) -> Void in 
      self.sourceViewController.presentViewController(self.destinationViewController as UIViewController, animated: false, completion: nil) 
     } 
    } 
} 

Und hier ist der Code aus der View-Controller-Taste Aktion-Methode, wo ich die Segue starten:

performSegueWithIdentifier("customSlideSegue", sender: self) 

Hier ist ein Video der segues zeigt:

The second slide happens after the image picker.

Kann jemand das Problem? Oder wie sollte ich über das Debugging gehen? Dankbar für die Antworten!

+0

können Sie mehr Code zeigen, wo Sie das benutzerdefinierte Segment tatsächlich verwenden? –

+0

Hinzugefügt zu der Frage. Ich benutze den performSegueWithIdentifier ("customSlideSegue", sender: self) in der Methode, die aufgerufen wird, dann wird die Schaltfläche gedrückt. –

+0

Ich habe natürlich verschiedene IDs auf beiden Segmenten :) –

Antwort

0

Das Problem war, dass das zweite Mal, wenn Sie das Segment aufrufen die Transformation des Quellansichtscontrollers hat bereits einen Wert von -screenWidth und somit wird es nicht aus dem Bildschirm geschoben. Ändern Sie Ihren Code in die folgenden:

override func perform() { 
    let firstVCView = self.sourceViewController.view as UIView! 
    let secondVCView = self.destinationViewController.view as UIView! 

    let screenWidth = UIScreen.mainScreen().bounds.size.width 

    secondVCView.transform = CGAffineTransformMakeTranslation(screenWidth, 0) 

    let window = UIApplication.sharedApplication().keyWindow 
    window?.insertSubview(secondVCView, aboveSubview: firstVCView) 

    UIView.animateWithDuration(0.6, animations: {() -> Void in 
     firstVCView.transform = CGAffineTransformMakeTranslation(-screenWidth, 0) 
     secondVCView.transform = CGAffineTransformIdentity 
    }) { (Finished) -> Void in 
     self.sourceViewController.presentViewController(self.destinationViewController, animated: false, completion: nil) 
    } 
} 
+0

Vielen Dank! Ich dachte, es würde die Transformation zurücksetzen, wenn ich den Rahmen zurücksetzen würde! Ich bin sehr neu in Animationen und benutzerdefinierten Übergängen in iOS, ich schätze die Zeit, die Sie genommen haben, um mir zu helfen! –

+0

keine Sorgen. Bitte. :) –

Verwandte Themen