14

我有一张地图。在地图上,我想画一个小而模糊的圆圈。我已经实现了这样的东西:

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

现在的问题是使这个观点变得圆润。我试过了:

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

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

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

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

顺便说一句:我试过FXBlurView了,但是它的工作速度很慢,我不能接受我的应用程序在 iPhone 5 上仅加载地图 + 模糊约 1 分钟。

4

6 回答 6

33

试用:

self.visualEffectView.clipsToBounds = YES;

在设置cornerRadius后放置它。这应该是它。你可以省略 BezierPath 的东西。希望这可以帮助 :)

编辑

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

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

于 2015-03-01T20:03:05.037 回答
8

如果有人想知道该怎么做,我想出了这一点,不需要代码:

  1. 在属性编辑器中创建一个视图并将其背景设置为“清除颜色”(它必须是清除颜色而不是默认颜色。

  2. 将另一个视图拖到第一个视图的顶部,将其调整为您想要的视觉效果视图的大小,然后在属性编辑器中将其背景设置为“清除颜色”,然后选中“剪辑子视图”。

    同样在此视图中,转到身份检查器并在“用户定义的运行时属性”下添加一个名为“layer.cornerRadius”的新键路径,使其类型为“数字”,并将其值设置为 9 或更高以获得体面的圆角边缘. (Xcode 中有一个错误,一旦您更改类型,就会将键路径更改回默认值,如果发生这种情况,请务必返回并重新输入 layer.cornerRadius)。

  3. 在步骤 3 中将带有模糊的视觉效果视图拖到视图顶部。

  4. 现在运行你的程序。您将拥有圆润的边缘、模糊和无伪影。

现在,我创建了我的链接,它使用 segue 进行链接,如果您需要它来使用 segue,则必须将 segue 设置为 Modal,并且必须将演示文稿设置为 OVER Full Screen(而不仅仅是 Full Screen)。

这是一个演示它的项目文件的链接。注意第二个视图控制器中视图的层次结构:Dropbox 上的项目文件

编辑:我的照片消失了,所以我读了它。例子

于 2016-04-14T23:39:49.227 回答
4

自最初的问题以来,事情显然发生了变化,但我只需在视觉效果视图本身的“用户定义的运行时属性”中选择“剪辑到边界”并设置“layer.cornerRadius”即可实现这一点。

于 2019-11-03T15:22:38.043 回答
0

画圆 CornerRadius 必须等于 width/2 在你的例子中 width = 30 然后 CornerRadius = 30/2 = 15;

于 2017-03-20T16:48:46.370 回答
0

这对我有用

@IBOutlet weak var blurView: UIVisualEffectView!

在 viewDidLoad()

blurView.layer.cornerRadius = 10;
blurView.clipsToBounds  =  true

您可以根据自己的喜好更改拐角半径。

于 2019-12-31T07:18:27.283 回答
-2

好吧,所以有可能像在普通 UIView 上一样应用圆角。但是UIVisualEffectView看起来不太好,因为圆的弯曲“边”附近的区域没有正确模糊。因为它看起来有缺陷和丑陋,我不建议 round UIVisualEffectView

于 2015-03-13T09:13:02.533 回答