Как подтолкнуть ViewController с помощью ModalView? - PullRequest
0 голосов
/ 17 октября 2018

Как я могу выдвинуть UIViewController ( VC ), представляющий модальное представление ( MV ), на экран с одной анимацией перехода слева направо?

Я попытался:

  • Установка стиля модального перехода MV, а затем добавление обоих контроллеров к viewControllers контроллера навигации.Это, однако, приводит к тому, что MV просто становится контроллером, отклоненным как любой другой контроллер в стеке.

  • Я попытался представить MV из VC без анимации, а затем добавить VC к viewControllers ипредставляя стек, как указано выше.Это привело к мгновенному представлению MV, когда начинается переход к VC, а сам VC анимируется на экран, как и ожидалось.Например, MV не следует за VC, когда он вставляется.

  • Я попытался представить MV из VC с включенной анимацией, но это приводит к двум переходам: сначала VC анимируется на экране, затемVC скользит вверх.

У меня нет идей, но я бы хотел родное и чистое решение: как перейти к VC с помощью одного обычного толчка слева направо, когдаVC полностью покрывается MV?

Ключевым моментом является то, что MV анимируется вместе с VC;MV будет выглядеть и вести себя как полноэкранное подпредставление, но при отклонении он анимируется за пределами экрана, как и любой другой модальный контроллер вида.

1 Ответ

0 голосов
/ 17 октября 2018

Есть много решений этой проблемы.Я думаю, что UIPresentationController может дать здесь важную подсказку.

Я стараюсь сделать ответ максимально простым здесь.Вы можете изменить параметры или даже создать подкласс UIPresentationController для достижения полной анимации по вашему желанию.

         import UIKit


        //Green
        class TransViewController: UIViewController {

            // MARK: - Navigation


            override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
                // Get the new view controller using segue.destination.
                // Pass the selected object to the new view controller.
               let dest = segue.destination
               let nextVC = storyboard?.instantiateViewController(withIdentifier: "modelViewController")
                if let myPresenter = dest.presentationController{
                    myPresenter.presentedView!.addSubview(nextVC!.view)
                    nextVC!.view.center = CGPoint.init(x: nextVC!.view.center.x + nextVC!.view.frame.width , y: nextVC!.view.center.y)
                    UIView.animate(withDuration: 0.5, animations: {
                         nextVC!.view.center = self.view.center
                    }) { (success) in
                        dest.present(nextVC!, animated: false, completion: nil)
                    }
                }
            }
        }


        //Yellow  ; "modelViewController"

        class ModelViewController: UIViewController {
            @IBAction func click(_ sender : UIButton){
              self.dismiss(animated: true, completion: nil)
            }
        }

enter image description here

...