2016-04-20 22 views
1

私はSwiftでiOSアプリケーションを作成しています。右から左に移行するカスタムセグを作成したいと思います。デフォルトのトランジション方法は左から右ですが、逆のトランジション方法が必要です。私はちょうどこのようなコードを書いた。右から左に遷移するCustom Segueを作成することは可能ですか?

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

しかし、これはちょうど反転して動きます。私はこれを行うことができますどのような方法ですか?ありがとう!

答えて

2

この

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

それともこれを試してみてください!

class RightToLeftSegue : UIStoryboardSegue { 

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

} 
+0

驚くばかり!できます!一つの質問があります。アニメーションが発生すると、アニメーションが完了する前に空白のページが表示されます。この場合はしばらく黒くなり、window.backgoundColorを白に変更しました。しかし、通常のsegueと同じようにdestinationViewControllerを表示できる方法はありますか? – Dave

+0

@Daveあなたの質問は何か分かりません。だから、アニメーションの後、あなたが望むものではなく、destinationViewControllerが空白になっていますか? –

+0

いいえ、destinationViewControllerは実際にアニメーションが完了した後に表示されますが、アニメーションが発生している間は空白のページしか表示されません。 – Dave

関連する問題