我最终编写了一个自定义演示控制器。从来没有找到用标准演示文稿来做到这一点的方法。
在我想要效果viewDidLoad的视图中:
//Custom Modal Presentation
[self setModalPresentationStyle:UIModalPresentationCustom];
//blur the controlContainerView
if (!UIAccessibilityIsReduceTransparencyEnabled()) {
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:[self blurStyle]];
UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
blurEffectView.frame = self.controlContainerView.bounds;
[blurEffectView setOpaque:NO];
[self.controlContainerView insertSubview:blurEffectView atIndex:0];
[blurEffectView setTranslatesAutoresizingMaskIntoConstraints:false];
}
调用上述视图:
//in .h
@property (nonatomic) id<UIViewControllerTransitioningDelegate> transitioningDelegate;
//In .m
BlurViewController *blurVC = [self.storyboard instantiateViewControllerWithIdentifier:@"blurView"];
_transitioningDelegate = [[MyCustomOverlayDelegate alloc] init];
[blurView setModalPresentationStyle:UIModalPresentationCustom];
[blurView setTransitioningDelegate:[self transitioningDelegate]];
[blurView setBlurStyle:UIBlurEffectStyleLight];
[self presentViewController: blurView animated:YES completion:nil];
您还需要导入整个演示控制器类堆栈。对我来说,它们是 OverlayDelegate、OverlayTransitionAnimator 和 OverlayPresentationController。这就是真正的工作所在。
如果可以,请查看 WWDC 2014 session 228“A look inside presentation controllers”。自定义演示文稿大约在中途进行了介绍。这是我用来建立我的自定义堆栈的基础,并且相当直截了当。