iOS:使用UIModalPresentationCurrentContext无法正常工作的故事板中的透明背景模式

时间:2014-10-29 18:25:25

标签: ios uistoryboard modalviewcontroller uistoryboardsegue uiviewanimationtransition

我在自定义UIStoryBoardSegue的{​​{1}}方法中看到了一堆关于SO的例子来实现具有透明背景的模态,但是当我尝试这样做,一旦动画结束并调用presentViewController,模态的黑色背景立即回来。这是代码:

perform

我还将模态presentationStyle设置为" Current Context"在源VC通过IB:

enter image description here

我没有使用- (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:错误。

1 个答案:

答案 0 :(得分:0)

解决:

所以看起来没有办法(据我所知)执行一个完全包含在perform方法中的透明背景的自定义模态segue。

解决方案是将我的自定义segue设置为transitionDelegate内的perform,然后在animateTransition:中执行动画。最后,在动画结束后调用[transitionContext completeTransition:YES];

执行此操作后,“不平衡呼叫...”错误也消失了。