要使模糊的UIVibrancyEffect起作用,我们是否必须将其作为单独的视图添加到UIBlurEffect的contentView?

Dou*_*ith 5 objective-c uiview ios swift ios8

我正在尝试使用UIVibrancyEffect类似于iOS 7/8中的控制中心添加模糊的充满活力的叠加层.我只是试图建立一个UIVisualEffectViewUIVibrancyEffect随后补充说,以我的观点,但结果没有模糊,只是做出充满活力.

为了让它变得模糊,似乎我必须将生动的效果视图添加到模糊效果视图的内容视图中:

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]];
Run Code Online (Sandbox Code Playgroud)

(感谢Justin Williams)

是这样的吗?如果是这样,为什么我必须在实例化时传递模糊效果UIVibrancyEffect?我们能够获得不明显的充满活力的观点吗?如果是这样的话,我似乎无法做到这一点,也不知道为什么你会模糊不清.

mat*_*att 4

按顺序回答最后一段中的问题:是;因为这就是它的用途;不。

活力效果的唯一目的是与底层模糊效果协调一致,因此您必须使用将在其后面分层的模糊视觉效果视图的模糊效果来初始化活力效果。有关更多信息,请参阅 WWDC 2014 视频 221 以及UIVisualEffectView.h标头。