2016-04-13 8 views
0

navigationControllerのプッシュとポップでアニメーションをトランジションしたいと思います。しかし、それは本当に変です。 1/125のようにfromViewControllerはフェードアウトしますが、toViewControllerはフェードインしません。制約も時々変だ。私が標準的な移行を使用する場合、それはすべてOKです。UIViewControllerAnimatedTransitioningが正しく動作しません

class TMFadeAnimator: NSObject, UIViewControllerAnimatedTransitioning { 

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

    func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 

     let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) 
     let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) 
     toViewController?.beginAppearanceTransition(true, animated: true) 
     fromViewController?.beginAppearanceTransition(false, animated: true) 

     transitionContext.containerView()!.addSubview(toViewController!.view) 


     toViewController!.view.alpha = 0.0 

     UIView.animateWithDuration(self.transitionDuration(transitionContext), animations: { 
      toViewController!.view.alpha = 1.0 
      fromViewController!.view.alpha = 0.0 
     }) { (finished) in 
      toViewController?.endAppearanceTransition() 
      fromViewController?.endAppearanceTransition() 
      transitionContext.completeTransition(finished) 
     } 
    } 
} 
+0

これは解決策ではありませんが、私の移行コンテキストでは、viewForKeyを使用するビューコントローラではなくビューを抽出します。私はそれが違いを作るだろうとは思っていませんが、私はそれがビューのコントローラは、ビューを操作する方法に制限を持つ可能性があると思う。私はまた、開始/終了の外観の遷移を呼び出さない....私はあなたがこれらのタイプのカスタムアニメーションのためにすると思われるものを少し後にするかもしれない。 –

+0

@ A'saDickensあなたが期待どおりに何の違いもありません –

+0

何が起こっているのGIFを作ることができますか?本当にシンプルなアプリケーションであるlicecapを使用しています。それができないのなら、それは大丈夫です。 XD –

答えて

0

不思議なことに問題が定義されていただけtoViewControllerfromViewControllertoViewController?.view.frame = fromViewController!.view.frameを置くことによって解決された。ここに私の移行クラスです。 (A'sa Dickensに感謝してくれてありがとう)。ここに最終コードがあります

class TMFadeAnimator: NSObject, UIViewControllerAnimatedTransitioning { 

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

    func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 

     let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) 
     let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) 

     toViewController?.view.frame = fromViewController!.view.frame 

     toViewController?.beginAppearanceTransition(true, animated: true) 
     fromViewController?.beginAppearanceTransition(false, animated: true) 

     transitionContext.containerView()!.addSubview(toViewController!.view) 


     toViewController!.view.alpha = 0.0 

     UIView.animateWithDuration(self.transitionDuration(transitionContext), animations: { 
      toViewController!.view.alpha = 1.0 
      fromViewController!.view.alpha = 0.0 
     }) { (finished) in 
      toViewController?.endAppearanceTransition() 
      fromViewController?.endAppearanceTransition() 
      transitionContext.completeTransition(finished) 
     } 
    } 
} 
関連する問題