Я хочу подождать, пока анимация завершения не завершится, но я не хочу использовать много блоков в своем коде, поэтому я написал эту функцию в UIViewController
extension
(почти как это работало несколько лет назад для меня):
func dismissAnimated() {
var comleted: Bool = false
self.dismiss(animated: true) {
comleted = true
}
while !comleted {
RunLoop.current.run(mode: RunLoop.Mode.common, before: Date.distantFuture)
}
}
так что теперь вместо:
viewController.dismiss(animated: true) {
// code after completion
}
Я должен был написать:
viewController.dismissAnimated()
// code after completion
Но он не закрывает контроллер представления и не входит в блок завершения.
Я пробовал разные режимы RunLoop, пробовал разные даты, пытался вставить RunLoop.current.run в то время, пока условие не сработало. Есть идеи как это сделать?
Edit:
И это работало на iOS 9 или что-то вроде этого (может быть, с некоторыми изменениями кода, потому что я не могу найти свой исходный код). Я запускаю RunLoop.current.run
, чтобы избежать блокировки основного потока. Например, если я добавлю completed = true
в DispatchQue.main.asyncAfter, он будет работать, проблема с dismiss