首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 8带有UIBlurEffect的UIVisualEffect视图变得不透明

iOS 8带有UIBlurEffect的UIVisualEffect视图变得不透明
EN

Stack Overflow用户
提问于 2015-01-25 21:10:32
回答 4查看 4.7K关注 0票数 4

我试图用模糊透明的背景来表达一种观点,而不是现有观点。我能够在演示动画中获得期望的效果,但是一旦模糊的视图被完全呈现,它就变得不透明了。

以下是我展示它的方式:

代码语言:javascript
复制
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];
}

在我模糊的视野中,我把背景色设置为清晰的颜色,不透明的设置为否。有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-02-06 02:34:35

最后,我编写了一个定制的演示控制器。从没有找到一种用标准演示文稿来做到这一点的方法。

在我想要效果viewDidLoad的视图中:

代码语言:javascript
复制
//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];
}

调用上述视图:

代码语言:javascript
复制
//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“查看演示控制器内部”。自定义演示文稿约在一半的时间内进行。这是我过去的习惯,我的自定义堆栈和合理地直接前进。

票数 0
EN

Stack Overflow用户

发布于 2016-06-16 10:43:08

请注意,任何具有UIVisualEffectViewUIBlurEffect将是不透明的,如果“减少透明度”可访问性设置是打开的。

(设置>一般>可访问性>增强对比度>降低透明度)

(这就是您实际使用if (!UIAccessibilityIsReduceTransparencyEnabled())语句检查的内容。)

票数 1
EN

Stack Overflow用户

发布于 2015-08-28 12:10:39

从文件中:

UIBlurEffect对象对UIVisualEffectView后面的内容应用模糊效果。

所以我认为问题在于你清晰的backgroundColor。如果您的UIVisualEffectView后面有某种内容或颜色,它应该可以工作。

代码语言:javascript
复制
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
UIVisualEffectView *blurredView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];

这个简单的代码片段确实适用于我。在ViewController中,我想显示我称之为[[self view] addSubView:blurredView]的模糊效果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28141557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档