2017-08-29 2 views
1

J'ai été à cela pendant des heures et ne peux pas comprendre ce que je fais mal. J'ai bricolé des transitions de contrôleur de barre d'onglet personnalisé en se conformant à UITabBarControllerDelegate comme décrit dans mon précédent Swift: Problems with custom UIView.transition?UIViewControllerAnimatedTransitioning ne fonctionne qu'une fois sur deux?

Je ne pas utiliser les boutons normaux de la barre d'onglet story-board, je passe selectedIndex programme. Mon problème est que seulement avec cela mis en œuvre:

func tabBarController(_ tabBarController: UITabBarController, animationControllerForTransitionFrom fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
     let animator = ModalTransition() 
     animator.fromView = fromVC.view 
     animator.toView = toVC.view 
     return animator 

    } 

les animations ET la commutation de l'indice se produit seulement une fois sur deux. J'ai des boutons personnalisés pour basculer l'index et à chaque fois, rien ne se passe lorsque je clique sur le bouton de commutation. Voici mon animation:

// 
// ModalTransition.swift 
// Adventures In Design 
// 
// Created by Skylar Thomas on 8/28/17. 
// 

import UIKit 

class ModalTransition: NSObject, UIViewControllerAnimatedTransitioning { 

    weak var transitionContext: UIViewControllerContextTransitioning? 
    var fromView = UIView() 
    var toView = UIView() 
    var duration = 1.1 


    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { 
     return 1 
    } 

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { 

     let containerView = transitionContext.containerView 
     containerView.addSubview(toView) 
     containerView.sendSubview(toBack: toView) 

     print("ANIMATING") 

     UIView.animate(withDuration: duration, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.0, options: .curveLinear, animations: { 
      self.fromView.center.y += 900 

     }, completion: { 
      finished in 

      //only works every OTHER click 
      transitionContext.completeTransition(!transitionContext.transitionWasCancelled) 
      self.fromView.center.y -= 900 
     }) 


    } 
} 

Qu'est-ce qui cause cela? Est-ce quelque chose?

Répondre

1

Je pense que vous n'assignez pas votre toView et FromView. Essayez quelque chose comme ceci

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { 
      let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from)! 
      let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to)! 

      let fromView = fromViewController.view 
      let toView = toViewController.view 
      let container = transitionContext.containerView 
      container.addSubview(toView!) 
      // Replace your animations here 
toView?.frame = transitionContext.finalFrame(for: toViewController) 
     toView?.alpha = 0 
     let duration = self.transitionDuration(using: transitionContext) 
     UIView.animate(withDuration: duration, delay: 0, options: .curveEaseInOut, animations: { 
      toView?.alpha = 1 
      fromView?.alpha = 0 
     }, completion: { finished in 
      toView?.alpha = 1.0 
      fromView?.alpha = 1 
      fromView?.removeFromSuperview() 
      transitionContext.completeTransition(true) 

     }) 

     } 
+0

Ne fonctionne toujours que sur un autre. Pouvez-vous montrer un exemple d'animation? Peut-être que je n'anime pas correctement – skyguy

+0

Bien sûr .. Vérifiez la réponse éditée. Faites-moi savoir si cela aide –

+0

Quelque chose là-dedans l'a corrigé. Merci! – skyguy