为了使模糊的 UIVibrancyEffect 起作用,我们是不是必须将其作为单独的视图添加到 UIBlurEffect 的 contentView 中?
Posted
技术标签:
【中文标题】为了使模糊的 UIVibrancyEffect 起作用,我们是不是必须将其作为单独的视图添加到 UIBlurEffect 的 contentView 中?【英文标题】:For a blurred UIVibrancyEffect to work, do we have to add it as a separate view to a UIBlurEffect's contentView?为了使模糊的 UIVibrancyEffect 起作用,我们是否必须将其作为单独的视图添加到 UIBlurEffect 的 contentView 中? 【发布时间】:2014-08-07 19:48:41 【问题描述】:我正在尝试使用UIVibrancyEffect
添加类似于 ios 7/8 中的控制中心的模糊生动覆盖。我尝试使用UIVibrancyEffect
创建一个UIVisualEffectView
,然后将其添加到我的视图中,但结果并没有模糊,而是充满活力。
为了让它变得模糊,我似乎必须将充满活力的效果视图添加到模糊效果视图的内容视图中:
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
effectView.translatesAutoresizingMaskIntoConstraints = NO;
// Add the blur effect to an image view.
[self.imageView addSubview:effectView];
[self.imageView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[v]|" options:0 metrics:nil views: @ @"v" : effectView ]];
[self.imageView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[v]|" options:0 metrics:nil views: @ @"v" : effectView ]];
UIVibrancyEffect *vibrance = [UIVibrancyEffect effectForBlurEffect:blurEffect];
UIVisualEffectView *effectView2 = [[UIVisualEffectView alloc] initWithEffect:vibrance];
effectView2.translatesAutoresizingMaskIntoConstraints = NO;
// Add the vibrance effect to our blur effect view
[effectView.contentView addSubview:effectView2];
[effectView.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[v]|" options:0 metrics:nil views: @ @"v" : effectView2 ]];
[effectView.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[v]|" options:0 metrics:nil views: @ @"v" : effectView2 ]];
self.test = [[UILabel alloc] initWithFrame:CGRectZero];
self.test.translatesAutoresizingMaskIntoConstraints = NO;
self.test.text = @"TEST";
self.test.textColor = [UIColor whiteColor];
self.test.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:30];
self.test.textAlignment = NSTextAlignmentCenter;
// Add label to the vibrance content view.
[effectView2.contentView addSubview:self.test];
[effectView2.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.test attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:effectView2.contentView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]];
[effectView2.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.test attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:effectView2.contentView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]];
(Credit to Justin Williams)
是这样吗?如果是这样,为什么在实例化UIVibrancyEffect
时必须传递模糊效果?我们是否能够拥有清晰的、充满活力的观点?如果是这样,我似乎无法让它发挥作用,我也不明白你为什么要通过模糊。
【问题讨论】:
您可能认为您指定了两次UIBlurEffect
,但是 - UIVibrancyEffect
在它的初始化程序中采用了UIBlurEffect
,让它知道如何为您计划的模糊创建特定的活力效果采用。您始终可以将 UIVisualEffectView
effect
属性传递给它。
【参考方案1】:
按顺序回答最后一段中的问题:是的;因为这就是它的用途;没有。
活力效果的唯一目的是与潜在的模糊效果协调一致,这就是为什么您必须使用模糊视觉效果视图的模糊效果来初始化活力效果在它后面分层。有关更多信息,请参阅 WWDC 2014 视频 221,以及 UIVisualEffectView.h 标头。
【讨论】:
以上是关于为了使模糊的 UIVibrancyEffect 起作用,我们是不是必须将其作为单独的视图添加到 UIBlurEffect 的 contentView 中?的主要内容,如果未能解决你的问题,请参考以下文章