Не удается повторно использовать пользовательский класс StoryboardSegue для нескольких сегментов - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь создать пользовательскую анимацию для переходов между несколькими контроллерами представления, чтобы новые пользователи настраивали свое приложение пошагово.Я пытаюсь использовать один и тот же пользовательский класс UIStoryBoardSegue (где я переопределяю выполнение func) для всех сегментов, так как кажется неэффективным создавать по одному для каждого, когда все они одинаковы.

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

override func perform() {
    let firstVCView = source.view!
    let secondVCView = destination.view!

    let screenWidth = UIScreen.main.bounds.size.width

    secondVCView.frame = secondVCView.frame.offsetBy(dx: screenWidth, dy: 0.0)

    let superView = firstVCView.superview
    superView?.insertSubview(secondVCView, aboveSubview: firstVCView)

    UIView.animate(withDuration: 0.35, animations: { () -> Void in
        firstVCView.frame = firstVCView.frame.offsetBy(dx: -screenWidth, dy: 0.0)
        secondVCView.frame = secondVCView.frame.offsetBy(dx: -screenWidth, dy: 0.0)
    }, completion: { (finished) -> Void in
        self.source.dismiss(animated: false, completion: nil)
    })
}

Есть идеи, чего не хватает, или есть лучший способ достичь того, что я пытаюсь сделать?Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2018

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

Если вы не хотите удалять контроллер представления исходного кода из стека vc, просто не отклоняйте контроллер представления исходного кода и не добавляйте self.source.присутствует (self.destination, animated: false, завершение: ноль), как показано ниже.

 UIView.animate(withDuration: 0.35, animations: { () -> Void in
        firstVCView.frame = firstVCView.frame.offsetBy(dx: -screenWidth, dy: 0.0)
        secondVCView.frame = secondVCView.frame.offsetBy(dx: -screenWidth, dy: 0.0)
    }, completion: { (finished) -> Void in
           self.source.present(self.destination, animated: false, completion: nil)
      //  self.source.dismiss(animated: false, completion: nil)

    })

Если вы хотите отказаться, вы должны использовать родительский vc вашего исходного vc, чтобы выдвинуть или представить целевой vcкак UINavigationViewContoller или UITabViewController.Надеюсь, что это решит ваши вопросы.

...