У меня есть приложение, которое использует пользовательские анимации segue (на основе https://www.appcoda.com/custom-segue-animations/).. Оно работало годами, но после iOS 13 сегменты раскручивания не анимируются (тогда появляется черный экран, а не скользит в).
Когда я устанавливаю для контроллеров представления новый modalPresentationStyle
на .fullScreen
. Анимация не работает, но работает по умолчанию.
Вот мой код:
class TransitionManagerHorizonal: UIStoryboardSegue {
override func perform() {
// Assign the source and destination views to local variables.
var unwind = false
let firstVCView = source.view as UIView?
let secondVCView = destination.view as UIView?
let id = horizontalUnwindSegues.filter {$0 == identifier}
if id.count > 0 {
unwind = true
}
// Get the screen width and height.
let screenWidth = UIScreen.main.bounds.size.width
let offScreenRight = CGAffineTransform(translationX: screenWidth, y: 0)
let offScreenLeft = CGAffineTransform(translationX: -screenWidth, y: 0)
// Specify the initial position of the destination view.
secondVCView?.transform = offScreenLeft
// Access the app's key window and insert the destination view above the current (source) one.
let window = UIApplication.shared.keyWindow
window?.insertSubview(secondVCView!, aboveSubview: firstVCView!)
// Animate the transition.
UIView.animate(withDuration: 0.4, animations: { () -> Void in
firstVCView?.transform = offScreenRight
secondVCView?.transform = CGAffineTransform.identity
}, completion: { (Finished) -> Void in
if unwind {
self.destination.dismiss(animated: false, completion: nil)
} else {
self.source.present(self.destination ,
animated: false,
completion: nil)
}
})
}
}
Любопытно, что у меня есть еще один менеджер переходов, который просто использует альфа-анимацию для анимации, и он хорошо работает. По-видимому, проблема заключается в перемещении представления в полноэкранном режиме.