我在自定义UIStoryBoardSegue
的{{1}}方法中看到了一堆关于SO的例子来实现具有透明背景的模态,但是当我尝试这样做,一旦动画结束并调用presentViewController,模态的黑色背景立即回来。这是代码:
perform
我还将模态presentationStyle设置为" Current Context"在源VC通过IB:
我没有使用- (void)perform {
UIViewController *sourceViewController = self.sourceViewController;
UIViewController *destinationViewController = self.destinationViewController;
sourceViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
[sourceViewController.view addSubview:destinationViewController.view];
destinationViewController.view.alpha = 0;
[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
destinationViewController.view.alpha = 1;
} completion:^(BOOL finished) {
[destinationViewController.view removeFromSuperview];
// boom, the black background returns!
[sourceViewController presentViewController:destinationViewController animated:NO completion:^{
// these have no effect
destinationViewController.view.backgroundColor = [UIColor clearColor];
destinationViewController.view.superview.backgroundColor = [UIColor clearColor];
}];
}];
}
。
如您所见,我已尝试设置目标视图控制器的背景颜色,目标视图控制器的超级视图,在sourceViewController 和 destinationViewController上设置UINavigationController
,但似乎没有任何作用!
如果我从超级视图和.modalPresentationStyle
调用中删除了删除目标视图的部分,那么一切正常,但目标VC已被解除密切,因此我无法进行交互用它和/或以后放松它。真的在这里不知所措。
编辑:在执行此路线后我在控制台中看到的另一个问题是presentViewController:
错误。
答案 0 :(得分:0)
所以看起来没有办法(据我所知)执行一个完全包含在perform
方法中的透明背景的自定义模态segue。
解决方案是将我的自定义segue设置为transitionDelegate
内的perform
,然后在animateTransition:
中执行动画。最后,在动画结束后调用[transitionContext completeTransition:YES];
。
执行此操作后,“不平衡呼叫...”错误也消失了。