2015-10-14 4 views
1

Я пытаюсь создать пользовательский segue в первый раз. Желаемый результат - создать новый ViewController за предыдущим, а затем сделать предыдущий слайд, как если бы он был удален или удален с экрана. Моя проблема Я не мог этого сделать. Это нормально, если я создаю новый под предыдущим (в этом случае оба скользящие вверх, один из которых выталкивает другую вставку), но это не то, что я пытаюсь сделать. Единственное, что мне удалось сделать, это скользящий предыдущий, но есть черный фон под ним, а не новый вид ...iOS custom Segue - Эффект слайда

Вот мой код (оба прокрутки на этом, это не ожидалось результат):

override func perform() { 

     let viewControllerToRemove = self.sourceViewController.view as UIView! 
     let viewControllerToShow = self.destinationViewController.view as UIView! 

     let screenWidth = UIScreen.mainScreen().bounds.size.width 
     let screenHeight = UIScreen.mainScreen().bounds.size.height 



     viewControllerToShow.frame = CGRectMake(0.0, screenHeight, screenWidth, screenHeight) 

     let window = UIApplication.sharedApplication().keyWindow 
     window?.insertSubview(viewControllerToShow, aboveSubview: viewControllerToRemove) 


     UIView.animateWithDuration(0.6, animations: {() -> Void in 

      viewControllerToShow.frame = CGRectOffset(viewControllerToShow.frame, 0.0, -screenHeight) 
      viewControllerToRemove.frame = CGRectOffset(viewControllerToRemove.frame, 0.0, -screenHeight) 

      }) { (Finished) -> Void in 
       self.sourceViewController.presentViewController(self.destinationViewController as UIViewController, 
        animated: false, 
        completion: nil) 

     } 
    } 

Любая помощь будет приветствоваться, заранее спасибо!

ответ

3

Вы должны использовать менеджер перехода, увидеть этот делегат: UIViewControllerAnimatedTransitioning и UIViewControllerTransitioningDelegate

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

С менеджером перехода оба представления находятся в контейнере перехода, поэтому вы можете поместить destinationView в видимый фон.

func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 

    // get reference to our fromView, toView and the container view that we should perform the transition in 
    let container = transitionContext.containerView() 
    let fromView = transitionContext.viewForKey(UITransitionContextFromViewKey)! 
    let toView = transitionContext.viewForKey(UITransitionContextToViewKey)! 

Затем установите рамки, чтобы обе точки зрения на том же месте и просто сделать что-то вроде этого:

container.addSubview(toView) 
container.addSubview(fromView) 
container.sendSubviewToBack(toView) 

Когда вы будете анимировать fromView, вы увидите toView в фоновом режиме на этот раз.

Больше информации на эту ссылку: http://mathewsanders.com/animated-transitions-in-swift/

+0

Я не знал об этой хитрости, и это абсолютно то, что я искал. Большое спасибо ! –

+1

Он не используется часто, потому что это немного дольше, но вы имеете больше контроля над своей анимацией :) –

+0

Я полностью согласен с вами. Я думаю, что я буду использовать его довольно часто в будущем, когда переходы по умолчанию не могут делать то, что я ищу –

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