我如何(成功)将maskView设置为UIView?

时间:2015-04-12 04:27:13

标签: ios objective-c uiview ios8 mask

我正在制作一款基于相机的应用程序,并希望在相机预览上制作一个磨砂覆盖图,并在磨砂视图中切出一个圆角矩形。

我一直在努力用UIView的maskLayer来实现这个目标,在iOS 8中引入并且已经非常不成功。

以下是我的代码目前的样子:

// Blur the preview
UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIView *blurView = [[UIVisualEffectView alloc] initWithEffect:effect];
blurView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view insertSubview:blurView aboveSubview:imagePicker.view];

// Make blur view fill screen
{
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[blurView]-0-|"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:NSDictionaryOfVariableBindings(blurView)]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[blurView]-0-|"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:NSDictionaryOfVariableBindings(blurView)]];
}

// Add a rounded of transparency to the blurView  **not working**
UIView *mask = [[UIView alloc] initWithFrame:CGRectMake(50.f, 50.f, 50.f, 50.f)];
mask.alpha = 1.0f;
mask.backgroundColor = [UIColor redColor];
[blurView setMaskView:mask]; // Remove this line, and everything is frosted.  Keeping this line and nothing is frosted. 

正如我的评论所示,添加蒙版完全去除了磨砂视图(更改蒙版的不透明度不起作用)。我知道这不会产生我正在寻找的效果(它应该只是在那个矩形中磨砂),但我不能让maskView以任何身份工作。

1 个答案:

答案 0 :(得分:6)

UIView api说

  

一个可选视图,其alpha通道用于屏蔽视图   内容。

最好的方法是使用装有RGBA图像的UIImageView运行alpha通道 - 从photoshop打开透明导出的PNG就可以了。然后调整大小,将原点设置为0,0。

第二种方法是创建一个UIView,没有alpha [UIColor clearColor]并添加一个具有alpha [UIColor whiteColor];的子视图

UIView *mask = [[UIView alloc] initWithFrame:(CGRect){0,0,100,100}];
mask.backgroundColor = [UIColor clearColor];
UIView *areaToReveal = [[UIView alloc] initWithFrame:(CGRect){20,20,50,50}];
areaToReveal.backgroundColor = [UIColor whiteColor];
[mask addSubview:areaToReveal];
_myView.maskView = mask;

您可以使用[UIColor colorFromRed: green: blue: alpha:x];

添加x量半透明的其他UIView