2014-10-02 2 views
3

Я хочу, чтобы отобразить свой собственный вид, когда пользователь нажимает кнопку в исходном контроллере представления, и поэтому я попытался определить следующую функцию, которая вызывается, когда пользователь нажимает кнопку:Как отобразить представление контейнера с анимацией в iOS?

func show() { 
    vc = UIViewController() 
    var button = UIButton(frame: CGRect(x: 0, y: 0, width: 200, height: 200)) 
    button.backgroundColor = UIColor.redColor() 
    button.addTarget(self, action: "hide", forControlEvents: UIControlEvents.TouchDown) 
    vc.view.addSubview(button) 

    self.addChildViewController(vc) 
    self.view.addSubview(vc.view) 
    vc.didMoveToParentViewController(self) 
} 

Когда пользователь нажимает кнопку, однако экран контейнера отображается на экране внезапно, но я хочу сделать его более плавным. Так что в следующий я попытался переписать его с анимацией, но я врезался в стену, так как я не знаю, что я должен написать для того, чтобы отобразить его с анимацией:

transitionFromViewController(self, toViewController: vc, duration: 0.5, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: {() -> Void in 
     self.addChildViewController(self.vc) 
     self.view.addSubview(self.vc.view) 
     }, completion: { 
     Bool -> Void in 
     self.vc.didMoveToParentViewController(self) 
}) 

Это возвращает ошибку: 'NSInvalidArgumentException', reason: 'Children view controllers <mmmmlvalsllsl.ViewController: 0x7fc980f71f70> and <UIViewController: 0x7fc980f6dd00> must have a common parent view controller when calling -[UIViewController transitionFromViewController:toViewController:duration:options:animations:completion:]'.

Я думаю, что должен использовать метод, но я не знаю, какой код писать в блоке animations: и что делать до completion: блока.

Как написать код анимации?

ответ

12

Вы можете использовать view transitioning так:

UIView.transitionWithView(self.view, duration: 0.5, options: .TransitionFlipFromLeft, animations: { _ in 
    self.view.addSubview(self.vc.view) 
}, completion: nil) 

Это будет анимировать изменение содержимого зрения контейнера (для отражения подтаблицы добавляется), вместо того, чтобы пытаться оживить сам переход вид контроллера. Вам вообще не нужно использовать transitionFromViewController.

+1

+1 для перехода на вид, а не контроллер представления. –

+0

Спасибо! И 'self.vc.view', а не' vc.view', потому что он находится в закрытии (не может редактировать его, потому что 'self' содержит только 4 символа). – Blaszard

+0

@ Gardecolo спасибо, исправлено это. Из-за этих несоответствий я не очень быстро использую Свифт. – Greg

0

версия быстры 4 @ ответ Грега

UIView.transition(with: self.view, duration: 0.5, options: .transitionFlipFromLeft, animations: { 
       self.view.addSubview(self.vc.view) 
      }, completion: nil) 

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

  • Нет связанных вопросов^_^