圆形UIVisualEffectView

Viv*_*ive 13 objective-c blur ios uivisualeffectview

我有一张地图.在地图上,我想画一个小而模糊的圆圈.我实现了这样的事情:

UIVisualEffect *visualEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
self.visualEffectView = [[UIVisualEffectView alloc] initWithEffect:visualEffect];
[self addSubview:self.visualEffectView];
Run Code Online (Sandbox Code Playgroud)

然后在layoutSubviews:

[self.visualEffectView setFrame:CGRectMake(0.f, 0.f, 20.f, 20.f];
Run Code Online (Sandbox Code Playgroud)

现在的问题是围绕这个观点.我试过了:

[self.visualEffectView.layer setCornerRadius:10.f];
Run Code Online (Sandbox Code Playgroud)

但没有任何反应.另一个尝试是(基于SOF问题):

CAShapeLayer *mask = [CAShapeLayer layer];
mask.path = [UIBezierPath bezierPathWithOvalInRect:self.visualEffectView.bounds].CGPath;
self.visualEffectView.layer.mask = mask;
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,它visualEffectView是圆的,但不会模糊:/.有没有办法使它工作?

顺便说一下:我已经尝试过了FXBlurView,但是效果非常慢,我无法接受我的应用只能在iPhone 5上加载地图+模糊约1分钟.

cro*_*roX 30

试用:

self.visualEffectView.clipsToBounds = YES;
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

尝试一下,它适用于我的情况.

  • 已经尝试过这个,给出与设置掩码相同的结果 - 没有模糊. (2认同)

SN8*_*N81 8

我想出来,如果有人想知道如何做,不需要代码:

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

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

    同样在此视图上,转到身份检查器,在"用户定义的运行时属性"下添加一个名为"layer.cornerRadius"的新密钥路径,使其键入"Number",并将其值设置为9或更高,以获得合适的圆边.(Xcode中有一个错误,一旦你更改了Type,它就会将Key Path更改回默认值,如果发生这种情况,请确保返回并重新键入layer.cornerRadius).

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

  4. 现在运行你的程序.您将拥有圆边,模糊和无瑕疵.

现在,我创建了我使用segue链接的地方,如果您需要使用segue,则必须将segue设置为Modal,并且必须将演示文稿设置为OVER Full Screen(不仅仅是全屏).

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

编辑:我的照片消失了所以我读了它. 例


Ode*_*ded 5

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