有人可以给出一个将模糊应用于图像的小例子吗?我现在一直试图弄清楚代码:(在obj c上仍然是新的!
UIVisualEffectView
提供了对复杂的简单抽象 视觉效果。根据所需的效果,结果可能会 影响视图后面的内容或添加到视图中的内容 内容查看。将
UIVisualEffectView
应用于现有视图以应用模糊或 充满活力的现象。添加后 UIVisualEffectView到视图层次结构,添加任何子视图UIVisualEffectView
的contentView。不要直接添加子视图UIVisualEffectView
本身。
答案 0 :(得分:407)
只需将此模糊视图放在imageView上即可。这是Objective-C中的一个例子:
UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = imageView.bounds;
[imageView addSubview:visualEffectView];
和斯威夫特:
var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
visualEffectView.frame = imageView.bounds
imageView.addSubview(visualEffectView)
答案 1 :(得分:133)
以下是如何在UIVisualEffectView中使用UIVibrancyEffect和UIBlurEffect
目标-C:
// Blur effect
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
[blurEffectView setFrame:self.view.bounds];
[self.view addSubview:blurEffectView];
// Vibrancy effect
UIVibrancyEffect *vibrancyEffect = [UIVibrancyEffect effectForBlurEffect:blurEffect];
UIVisualEffectView *vibrancyEffectView = [[UIVisualEffectView alloc] initWithEffect:vibrancyEffect];
[vibrancyEffectView setFrame:self.view.bounds];
// Label for vibrant text
UILabel *vibrantLabel = [[UILabel alloc] init];
[vibrantLabel setText:@"Vibrant"];
[vibrantLabel setFont:[UIFont systemFontOfSize:72.0f]];
[vibrantLabel sizeToFit];
[vibrantLabel setCenter: self.view.center];
// Add label to the vibrancy view
[[vibrancyEffectView contentView] addSubview:vibrantLabel];
// Add the vibrancy view to the blur view
[[blurEffectView contentView] addSubview:vibrancyEffectView];
斯威夫特4:
// Blur Effect
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
view.addSubview(blurEffectView)
// Vibrancy Effect
let vibrancyEffect = UIVibrancyEffect(blurEffect: blurEffect)
let vibrancyEffectView = UIVisualEffectView(effect: vibrancyEffect)
vibrancyEffectView.frame = view.bounds
// Label for vibrant text
let vibrantLabel = UILabel()
vibrantLabel.text = "Vibrant"
vibrantLabel.font = UIFont.systemFont(ofSize: 72.0)
vibrantLabel.sizeToFit()
vibrantLabel.center = view.center
// Add label to the vibrancy view
vibrancyEffectView.contentView.addSubview(vibrantLabel)
// Add the vibrancy view to the blur view
blurEffectView.contentView.addSubview(vibrancyEffectView)
答案 2 :(得分:45)
您还可以使用界面构建器轻松创建这些效果以适应简单情况。由于视图的z值将取决于它们在“文档大纲”中列出的顺序,因此您可以在要模糊的视图之前将UIVisualEffectView
拖到文档轮廓上。这会自动创建嵌套的UIView
,这是给定contentView
的{{1}}属性。在此视图中嵌套要显示在模糊之上的内容。
您还可以轻松利用活力UIVisualEffectView
,这将在文档大纲中自动创建另一个嵌套UIVisualEffect
,默认情况下启用活力。然后,您可以将标签或文本视图添加到嵌套的UIVisualEffectView
(同样是UIView
的{{1}}属性),以达到与">相同的效果。滑动解锁" UI元素。
答案 3 :(得分:9)
如果有人想在Swift中得到答案:
var blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark) // Change .Dark into .Light if you'd like.
var blurView = UIVisualEffectView(effect: blurEffect)
blurView.frame = theImage.bounds // 'theImage' is an image. I think you can apply this to the view too!
更新:
截至目前,它已在IB下提供,因此您无需为此编写任何代码:)
答案 4 :(得分:7)
我更喜欢通过Storyboard创建视觉效果 - 没有用于创建或维护UI元素的代码。它也给了我完整的景观支持。我做了一个使用UIVisualEffects with Blur和Vibrancy的小演示。
答案 5 :(得分:2)
-(void) addBlurEffectOverImageView:(UIImageView *) _imageView
{
UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = _imageView.bounds;
[_imageView addSubview:visualEffectView];
}
答案 6 :(得分:0)
这用于模糊背景(浅色或深色),以便可以更轻松地覆盖文本。您可以选择启用鲜艳度,从而使文本以模糊的明亮,对比色呈现。