2017-06-26 3 views
5

je les 2 fonctions suivantes ajouter et supprimer des contrôleurs de vue de l'enfant déclenchés à partir d'un contrôleur de vue conteneur:Comment animer les contrôleurs de vue enfant lors de l'ajout/de la suppression d'un contrôleur de vue de conteneur?

@discardableResult func addChildViewController(withChildViewController childViewController: UIViewController) -> UIViewController { 
    // Add Child View Controller 
    addChildViewController(childViewController) 
    childViewController.beginAppearanceTransition(true, animated: true) 
    // Add Child View as Subview 
    view.addSubview(childViewController.view) 
    // Configure Child View 
    childViewController.view.frame = view.bounds 
    childViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    // Notify Child View Controller 
    childViewController.didMove(toParentViewController: self) 
    return childViewController 
} 
@discardableResult func removeChildViewController(withChildViewController childViewController: UIViewController) -> UIViewController { 
    // Notify Child View Controller 
    childViewController.willMove(toParentViewController: nil) 
    childViewController.beginAppearanceTransition(false, animated: true) 
    // Remove Child View From Superview 
    childViewController.view.removeFromSuperview() 
    // Notify Child View Controller 
    childViewController.removeFromParentViewController() 
    return childViewController 
} 

Les fonctions ci-dessus sont des extensions à UIViewController, donc tout ce que je fais est self.addChildViewController() et self.removeChildViewController() sur le contrôleur de vue parent. Comment puis-je animer la vue supprimée en cours de sortie et la vue en cours d'ajout?

+0

Avez-vous plusieurs contrôleurs enfants et essayez de passer d'une personne à une autre ou seulement une seule? –

+0

J'ai plusieurs contrôleurs de vue enfants, mais à un moment donné, j'en ajoute un et j'enlève le dernier. –

+0

Quelle animation voulez-vous quand le contrôleur de vue enfant est ajouté? –

Répondre

3

Animer entre les différents contrôleurs de vue de l'enfant: -

func cycleFromViewController(oldViewController: UIViewController, toViewController newViewController: UIViewController) { 
    oldViewController.willMove(toParentViewController: nil) 
    newViewController.view.translatesAutoresizingMaskIntoConstraints = false 

    self.addChildViewController(newViewController) 
    self.addSubview(subView: newViewController.view, toView:self.containerView!) 

    newViewController.view.alpha = 0 
    newViewController.view.layoutIfNeeded() 

    UIView.animate(withDuration: 0.5, delay: 0.1, options: .transitionFlipFromLeft, animations: { 
     newViewController.view.alpha = 1 
     oldViewController.view.alpha = 0 
    }) { (finished) in 
     oldViewController.view.removeFromSuperview() 
     oldViewController.removeFromParentViewController() 
     newViewController.didMove(toParentViewController: self) 
    } 
} 

En haut,

  • oldViewController: - enfant affiché actuel viewController
  • newViewController: - nouveau contrôleur vue enfant qui va ajouter ContainerView: - Vue dans laquelle tous les contrôleurs enfants sont affichés.

Animer vue enfant, vous pouvez utiliser différents types de style d'animation en remplaçant transitionFlipFromLeft à disponibles UIViewAnimationOptions exigence selon.

+0

Cela me rapproche un peu. Je devais faire view.addSubview (newViewController.view): self.addSubview (subView: newViewController.view, toView: self.containerView!) Ne fonctionnait pas. Avec cela cependant, la première fois que ma vision disparaît, elle disparaît, mais après cela, mes opinions ne se manifestent jamais. –