我有同样的问题,我发现一个干净的解决方案避免使用dispatch_async或dispatch_after。
简单地说,正如异常所描述的那样,当呈现转换仍在进行中时,您试图关闭视图控制器。 这意味着,一旦
- presentViewController:animated:completion:
完成块被调用,调用该辞退的转变尚未完成。
从iOS的7起过渡的UIViewController有一个可用的新方法
- transitionCoordinator
的transitionCoordinator给你 机会尽快转换完成后排队完成块。
该方法返回的对象符合UIViewControllerTransitionCoordinator协议。知道解决方案非常简单。
的
- presentViewController:animated:completion:
过渡协调器的调用之后被适当地由框架构成。
使用
- animateAlongsideTransition:completion:
它发送正确完成块。
这里有点代码段更好地解释解决方案
void(^completion)() = ^() {
[modalViewController dismissViewControllerAnimated:YES completion:nil];
};
// This check is needed if you need to support iOS version older than 7.0
BOOL canUseTransitionCoordinator = [viewController respondsToSelector:@selector(transitionCoordinator)];
if (animated && canUseTransitionCoordinator)
{
[viewController presentViewController:modalViewController animated:animated completion:nil];
[viewController.transitionCoordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
completion();
}];
}
else
{
[viewController presentViewController:modalViewController animated:animated completion:completion];
}
什么是你想上面的代码来实现的? – 2014-09-10 12:26:53
我刚刚遇到了完全相同的错误.. – Jeef 2014-09-10 15:07:48
我的假设是强制一个视图到一个单一的方向 - 这就是我在做什么,我有同样的错误 – Jeef 2014-09-10 15:16:25