如何使用UIVisualEffectView?

有人可以举一个小例子,将模糊应用到图像上吗? 我一直在试图找出一段时间的代码:(仍然在新的obj c!

UIVisualEffectView提供了对复杂视觉效果的简单抽象。 根据所需的效果,结果可能会影响分层视图的内容或添加到视图的contentView的内容。

UIVisualEffectView应用于现有视图,以将模糊或活力效果应用于正在退出的视图。 将UIVisualEffectView添加到视图层次结构后,将任何子视图添加到UIVisualEffectView的contentView。 不要直接将子视图添加到UIVisualEffectView本身。

https://developer.apple.com/documentation/uikit/uivisualeffectview#//apple_ref/occ/instp/UIVisualEffectView/contentView

把这个模糊视图放在imageView上。 Objective-C中有一个例子:

 UIVisualEffect *blurEffect; blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; UIVisualEffectView *visualEffectView; visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; visualEffectView.frame = imageView.bounds; [imageView addSubview:visualEffectView]; 

和Swift:

 var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light)) visualEffectView.frame = imageView.bounds imageView.addSubview(visualEffectView) 

这里是如何使用UIVicualEffect和UIBlurEffect与UIVisualEffectView

Objective-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]; 

迅速:

 // Blur Effect var blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark) var blurEffectView = UIVisualEffectView(effect: blurEffect) blurEffectView.frame = view.bounds view.addSubview(blurEffectView) // Vibrancy Effect var vibrancyEffect = UIVibrancyEffect(forBlurEffect: blurEffect) var vibrancyEffectView = UIVisualEffectView(effect: vibrancyEffect) vibrancyEffectView.frame = view.bounds // Label for vibrant text var vibrantLabel = UILabel() vibrantLabel.text = "Vibrant" vibrantLabel.font = UIFont.systemFontOfSize(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) 

您还可以使用界面生成器轻松创build这些效果,以适应简单的情况。 由于视图的z值取决于它们在“文档大纲”中列出的顺序,因此可以在要模糊的视图之前将UIVisualEffectView拖动到文档大纲上。 这会自动创build一个嵌套的UIView ,它是给定的UIVisualEffectViewcontentView属性。 在这个视图内embedded你想要显示在模糊之上的东西。

XCode6 beta5

您还可以轻松利用活力UIVisualEffect优势, UIVisualEffect将自动在文档大纲中创build另一个嵌套UIVisualEffectView ,默认情况下启用活动。 然后,可以将标签或文本视图添加到嵌套的UIView (同样, UIVisualEffectViewcontentView属性),以实现“>幻灯片解锁”UI元素的相同效果。

在这里输入图像描述

如果有人想在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下可用,所以你不必编写任何代码:)

我更喜欢通过Storyboard创build视觉效果 – 没有用于创build或维护UI元素的代码。 它也给了我全面的景观支持。 我做了一个使用模糊UIVisualEffects和Vibrancy演示。

在Github上演示

 -(void) addBlurEffectOverImageView:(UIImageView *) _imageView { UIVisualEffect *blurEffect; blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; UIVisualEffectView *visualEffectView; visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; visualEffectView.frame = _imageView.bounds; [_imageView addSubview:visualEffectView]; }