2017-02-08 3 views
3

Apple explique comment faire en sorte qu'une transition de contrôleur de vue de conteneur entre deux contrôleurs de vue enfants se fasse dans ce document. Je voudrais animer une simple poussée verticale glisser vers le haut identique à UIModalTransitionStyleCoverVertical en UIModalTransitionStyle. Cependant, transitionFromViewController autorise uniquement l'utilisation de UIViewAnimationOptions, et non de styles de transition. Alors, comment animerait-on en faisant glisser une vue?iOS: vue Container - transition de transition animée lors du changement des contrôleurs de vue enfant

Il est étrange que pour faire la transition entre les contrôleurs de vue enfant, vous ne pouvez pas appeler une simple méthode push similaire à UINavigationController pour animer la transition.

Répondre

4

Charger la vue enfant, définir le cadre avec l'origine.y sous l'écran inférieur. Après l'avoir changé à 0 dans le bloc d'animation. Exemple:

enum Animation { 
    case LeftToRight 
    case RightToLeft 
} 

func animationForLoad(fromvc: UIViewController, tovc: UIViewController, with animation: Animation) { 

     self.addChildViewController(tovc) 
     self.container.addSubview(tovc.view) 
     self.currentVC = tovc 

     var endOriginx: CGFloat = 0 

     if animation == Animation.LeftToRight { 
      tovc.view.frame.origin.x = -self.view.bounds.width 
      endOriginx += fromvc.view.frame.width 
     } else { 
      tovc.view.frame.origin.x = self.view.bounds.width 
      endOriginx -= fromvc.view.frame.width 
     } 

     self.transition(from: fromvc, to: tovc, duration: 0.35, options: UIViewAnimationOptions.beginFromCurrentState, animations: { 
      tovc.view.frame = fromvc.view.frame 
      fromvc.view.frame.origin.x = endOriginx 
      }, completion: { (finish) in 
       tovc.didMove(toParentViewController: self) 
       fromvc.view.removeFromSuperview() 
       fromvc.removeFromParentViewController()    
     })   
    } 

Le code ci-dessus est la transition entre 2 vues enfant avec animation horizontale push et pop.

+0

Il est nécessaire d'avoir un contrôleur de vue de base commun. Il me donne une erreur (se bloque) car je n'ai pas les contrôleurs communs de vue de base. – Hemang