Почему CATransaction.setCompletionBlock не вызывается
Следующий код работает на всех симуляторах устройств, к которым у меня есть доступ. Однако некоторые пользователи сообщали о проблеме, из-за которой я думаю, что блок завершения не вызывается в некоторых ситуациях. Я не в себе в данный момент. Любое предложение?
CATransaction.begin()
CATransaction.setCompletionBlock {
self.performSegue(withIdentifier: "ContractViewController", sender: sender.companyJob)
}
self.navigationController?.popViewController(animated: true)
CATransaction.commit()
Кстати, то, чего я хотел добиться, - это анимацию перехода на всплывающие и нажимные экраны. На данный момент я открыт для любого решения или обходного пути. Заранее спасибо.
Дополнительный документ из документа:
/* Accessors for the "completionBlock" per-thread transaction property. * Once set to a non-nil value the block is guaranteed to be called (on * the main thread) as soon as all animations subsequently added by * this transaction group have completed (or been removed). If no * animations are added before the current transaction group is * committed (or the completion block is set to a different value), the * block will be invoked immediately. Added in Mac OS X 10.6. */
1 ответ
Если вы используете конструктор интерфейсов, вы можете использовать Unwind Segue и создать пользовательский UIStoryboardSegue с таким блоком завершения, как этот
class StoryboardSegue: UIStoryboardSegue {
override func perform() {
super.perform()
// you can also use self.source. self.destination.transitionCoordinator
self.destination.transitionCoordinator?.animate(alongsideTransition: { _ in
}, completion: { context in
// do what you want after the animation is finished
// you can get the view controller by using
let toVC = context.viewController(forKey: .to)
})
}
}