2016-09-15 4 views
1

Я пытаюсь разработать контроллер контейнера, как показано в документации Apple.Container View Controller - Несбалансированные вызовы для перехода на начало/конец

На данный момент у меня есть простой код инициализации в viewDidAppear:

presentedVC = self.storyboard!.instantiateViewControllerWithIdentifier(Storyboard.yesNoControllerID) 
self.addChildViewController(presentedVC) 
presentedID = Storyboard.yesNoControllerID 
presentedVC.view.frame = containerView.bounds 
self.containerView.addSubview(presentedVC.view) 
presentedVC.didMoveToParentViewController(self) 

Я осуществил обмен метод, как и в Apple, док:

private func exchangeVC(withVC viewController: UIViewController){ 
    presentedVC.willMoveToParentViewController(nil) 
    self.addChildViewController(viewController) 

    viewController.view.frame = newViewStartFrame 
    let endFrame = oldViewEndFrame 
    self.containerView.addSubview(viewController.view) 

    self.transitionFromViewController(presentedVC, toViewController: viewController, duration: 0.25, options: UIViewAnimationOptions.CurveLinear, animations: { 
     viewController.view.frame = self.presentedVC.view.frame 
     self.presentedVC.view.frame = endFrame 
     }) { (finished) in 
      self.presentedVC.view.removeFromSuperview() 
      self.presentedVC.removeFromParentViewController() 
      viewController.didMoveToParentViewController(self) 
      self.presentedVC = viewController 
    } 

} 

Затем, у меня есть кнопка, которая звонит просто:

let controller = self.storyboard!.instantiateViewControllerWithIdentifier(presentedID) 
exchangeVC(withVC: controller) 

С помощью этого кода мои контроллеры анимируются на экране на кнопке pr ESS. Но в конце анимации я получаю:

несбалансированные вызовы начала/конца внешний вид переходов для UIViewController: 0x7aecf730.

Можете ли вы сказать мне, что я сделал неправильно? Как избавиться от этой ошибки/предупреждения?

ответ

1

У меня была аналогичная проблема. Как правило, это предупреждение появляется, когда вы пытаетесь представить один и тот же контроллер представления, не отпуская его сначала, но метод перехода должен обрабатывать все, что для вас. Я в конечном итоге фиксируя его с помощью

UIView.animate(withDuration:animations:completion:) 

вместо

UIViewController.transition(from:to:duration:options:animations:completion:) 

, как вы выше. Конечно, мне пришлось вручную добавлять и удалять подпункты. Я не уверен, почему это изменение сработало, но я думаю, что что-то не так с методом перехода UIViewController, который вызывает это предупреждение. К счастью, исправление очень просто.

+0

Я закончил с заменой его на segues. – Preetygeek

Смежные вопросы