2017-06-26 76 views
5

Ben bir kap görünümü denetleyicisinden tetiklenen çocuk görünümü denetleyicileri eklemek ve kaldırmak aşağıdaki 2 işlevleri:Kapsayıcı görünüm denetleyicisine eklerken/çıkarırken alt görünüm denetleyicilerini nasıl canlandırabilirim?

@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 
} 

fonksiyonları yukarıda UIViewController uzantıları, bu yüzden yapıyorum bütün self.addChildViewController olan() ve Ebeveyn görüntü denetleyicideki self.removeChildViewController().

Çıkarılan görünümü ve yoluna eklenen görünümü nasıl ekleyebilirim? Farklı çocuk görünümü denetleyicileri arasında

+0

Birden fazla çocuk denetleyiciniz var ve bahisçikleri değiştirmeyi mi deneyin? –

+0

Birden çok alttan görüntüleme denetleyicim var, ancak herhangi bir zamanda, bir tane ekliyorum ve sonuncuyu kaldırıyorum. –

+0

Çocuk görüntüleme denetleyicisi eklendiğinde hangi animasyonu istiyorsunuz? –

cevap

3

animasyon: - Yukarıda

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) 
    } 
} 

,

  • oldViewController: - Güncel çocuk viewController görüntülenen
  • newViewController: - ekleyeceğiz olacak Yeni çocuk görünümü denetleyicisi
  • containerView: - Tüm alt denetleyicilerin görüntülendiği bir görünüm.

mevcut UIViewAnimationOptions göre gereklilik için transitionFlipFromLeft değiştirerek animasyon tarzı farklı türü kullanabilirsiniz, çocuk görünümü canlandırmak için.

+0

Bu bana biraz yaklaşıyor. View.addSubview (newViewController.view) yapmak zorunda kaldım: self.addSubview (subView: newViewController.view, toView: self.containerView!) Çalışmadı. Bununla birlikte, görüşüm ilk kez kaybolduğunda, söner, ancak bundan sonra, görüşlerim asla gösterilmez. –