iOS 在调用完成块之前会在 viewDidDisappear 之后等待 CATransaction
Posted
技术标签:
【中文标题】iOS 在调用完成块之前会在 viewDidDisappear 之后等待 CATransaction【英文标题】:iOS will CATransaction wait after viewDidDisappear before calling the completion block 【发布时间】:2017-11-13 00:22:17 【问题描述】:在调用完成块之前,CATransaction 会在 viewDidDisappear 之后等待吗?
CATransaction.begin()
view_controller.navigationController?.popViewController(animated: false)
CATransaction.setCompletionBlock
self.call_some_function()
CATransaction.commit()
如果 view_controller 有自定义 viewDidDisappear 函数,self.call_some_function() 会在 viewDidDisappear 函数执行完成后执行吗?
我尝试设置断点,结果 viewDidDisappear 确实在完成块之前执行。不确定这种行为是否总是可以预测的,因为我找不到任何文档。
【问题讨论】:
你试过了吗,结果如何? 以上更新。是的,事实证明 viewDidLoad 在完成块之前执行。 【参考方案1】:尝试在弹出视图控制器之前设置完成块
CATransaction.begin()
CATransaction.setCompletionBlock
self.call_some_function()
view_controller.navigationController?.popViewController(animated: false)
CATransaction.commit()
或
CATransaction.setCompletionBlock
self.call_some_function()
CATransaction.begin()
view_controller.navigationController?.popViewController(animated: false)
CATransaction.commit()
【讨论】:
以上是关于iOS 在调用完成块之前会在 viewDidDisappear 之后等待 CATransaction的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 11 中,UIViewController 的 transitionFromViewController 从不调用它的完成块
ios - UIView.animateWithDuration 的交互式过渡完成块从未在 animateTransition 内部调用