2017-07-17 33 views
0

私は2つのビューコントローラ間を移行するためにカスタムセグを使用しています。これは私がそれらの遷移の1のために使用していセグエです:カスタムSegueは、ターゲットビューコントローラを表示する前に黒にアニメーション化します

class SegueFromRight: UIStoryboardSegue{ 
    override func perform() { 
     // Assign the source and destination views to local variables. 
     let src = self.source.view as UIView! 
     let dst = self.destination.view as UIView! 

     // Get the screen width and height. 
     let screenWidth = UIScreen.main.bounds.size.width 
     let screenHeight = UIScreen.main.bounds.size.height 

     // Specify the initial position of the destination view. 
     dst?.frame = CGRect(0.0, screenHeight, screenWidth, screenHeight) 

     // Access the app's key window and insert the destination view above the current (source) one. 
     let window = UIApplication.shared.keyWindow 
     window?.insertSubview(dst!, aboveSubview: src!) 

     // Animate the transition. 
     UIView.animate(withDuration: 0.4, animations: {() -> Void in 
      src?.frame = (src?.frame.offsetBy(dx: -screenWidth, dy: 0.0))! 
      dst?.frame = (dst?.frame.offsetBy(dx: -screenWidth, dy: 0.0))! 

     }) { (Finished) -> Void in 
      self.source.present(self.destination as UIViewController, 
                  animated: false, 
                  completion: nil) 
     } 

    } 
} 

セグエは完璧に動作、しかし、アニメーションは、私はそれが欲しいのですかではありません。デスティネーションビューコントローラを「プッシュ」すると、それは黒く表示されます。アニメーションが終了すると、実際のView Controllerに移動します。アニメーションが終了すると、新しいView Controllerがロードされるだけなので、それはそうだと思います。しかし、アニメーションが滑らかに見えるように、新しいView Controllerをどのようにプリロードするのですか? 宛先ビューコントローラ(以前のソースビューコントローラ)がすでにロードされているため、巻き戻しセグは黒いアニメーションを表示しません。

+0

'super.perform()'を呼び出すことを忘れないでください。 – erenkabakci

答えて

0

これはおそらく問題dst?.frame = CGRect(0.0, screenHeight, screenWidth, screenHeight)です。

代わりにこれを試すdst?.frame = CGRect(screenWidth, 0.0, screenWidth, screenHeight)

オリジナルの行は、画面の右端から離れているのではなく、画面の下端から外れるように宛先ビューを設定します。ビューを画面幅でアニメートすると、デスティネーションは画面の真下から下と左にスライドします。

+0

これが問題でした。フレームの座標を変更しないように無視されます。ありがとう、ちょうどそれを見つけることができませんでした! –

関連する問題