Позвольте мне ответить на ваш вопрос.В конце вашей анимации вы забыли установить связь между контроллерами источника и назначения.Другими словами, вам нужно вручную представить пункт назначения.
Если вы не хотите удалять контроллер представления исходного кода из стека 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.Надеюсь, что это решит ваши вопросы.