我试图在现有视图上呈现模糊透明背景的视图。我能够在演示动画期间获得所需的效果,但是一旦模糊的视图完全呈现,它就会变得不透明。
以下是我的演示方式:
if (!UIAccessibilityIsReduceTransparencyEnabled()) {
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
blurEffectView.frame = self.view.bounds;
[blurEffectView setOpaque:NO];
[self.view insertSubview:blurEffectView atIndex:0];
[blurEffectView setTranslatesAutoresizingMaskIntoConstraints:false];
}
在模糊的视图中,我将背景颜色设置为清晰颜色,不透明设置为NO。有什么想法吗?
答案 0 :(得分:1)
请注意,如果启用了“降低透明度”辅助功能设置,那么带有UIVisualEffectView
的任何UIBlurEffect
都将是不透明的。
(设置>常规>辅助功能>增加对比度>降低透明度)
(这是您实际使用if (!UIAccessibilityIsReduceTransparencyEnabled())
语句检查的内容。)
答案 1 :(得分:0)
我开始编写自定义演示控制器。从未找到过使用标准演示文稿的方法。
在我想要效果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会话228&#34;查看演示控制器内部&#34;。自定义演示文稿将在中途介绍。这就是我习惯使用自定义堆栈并且相当直接的原因。
答案 2 :(得分:0)
来自文档:
UIBlurEffect对象将模糊效果应用于UIVisualEffectView后面的内容。
所以我认为问题是你明确的backgroundColor。如果您在UIVisualEffectView后面有某种内容或颜色,它应该可以工作。
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
UIVisualEffectView *blurredView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
这个简单的代码片段对我有用。在ViewController中,我想显示模糊效果,我只需要调用[[self view] addSubView:blurredView]
答案 3 :(得分:0)
只需设置视图控制器即可保存模糊视图,如下所示:
myViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
它阻止了从视图层次结构中删除视图的优化,这反过来使得模糊视图首先呈现,从而使其不透明。