ios - 圆形 UIVisualEffectView

标签 ios objective-c blur uivisualeffectview

我有一张 map 。在 map 上,我想画一个模糊的小圆圈。我已经实现了这样的事情:

UIVisualEffect *visualEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
self.visualEffectView = [[UIVisualEffectView alloc] initWithEffect:visualEffect];
[self addSubview:self.visualEffectView];

然后在 layoutSubviews 中:

[self.visualEffectView setFrame:CGRectMake(0.f, 0.f, 20.f, 20.f];

现在的问题是使这个 View 变圆。我试过:

[self.visualEffectView.layer setCornerRadius:10.f];

然而什么也没有发生。另一个尝试是(基于 SOF question ):

CAShapeLayer *mask = [CAShapeLayer layer];
mask.path = [UIBezierPath bezierPathWithOvalInRect:self.visualEffectView.bounds].CGPath;
self.visualEffectView.layer.mask = mask;

但在这种情况下,visualEffectView 是圆形的但不会模糊 :/。有什么办法让它发挥作用吗?

顺便说一句:我已经尝试过 FXBlurView,但是它的运行速度非常慢,我不能接受我的应用程序在 iPhone 5 上仅加载 map + 模糊约 1 分钟。

最佳答案

试用:

self.visualEffectView.clipsToBounds = YES;

在设置 cornerRadius 之后放置它。应该是这样。您可以省略 BezierPath 内容。希望这会有所帮助:)

编辑:

我刚刚在自己的项目中尝试了类似的东西。保持圆角模糊的一个好方法就是将视觉效果 View 作为与视觉效果 View 具有相同框架的新 View 的 subview 。您现在可以设置这个新父 UIView 对象的角半径并将其 clipsToBounds 属性设置为 YES。然后它会自动为其 subview 提供角半径,因为它会裁剪到其边界。

试一试,它适用于我的情况。

关于ios - 圆形 UIVisualEffectView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28798269/

相关文章:

iphone - 如何基于现有类文件创建新类文件 - 在 Xcode 中

ios - Flurry IOS 崩溃并带有附加日志

java - 将 bytearray 转换为 Objective-C 数据结构

objective-c - 在没有后退按钮的情况下执行 segue?

html - 模糊除 div 中的一个元素之外的所有元素

javascript - 单击按钮模糊页面背景

ios - WatchKit 应用程序通过 Crashlytics 挂起并崩溃

ios - 在 iOS swift 中单击文本字段之前,文本不可见

ios - 以编程方式禁用 IOS 3d 触摸手势

javascript - Canvas 上的 IE8 模糊滤镜