¿Cómo puedo (con éxito) establecer una máscaraView en una UIView?

Estoy haciendo una aplicación basada en la camera y me gustaría hacer una superposition mate con la vista previa de la camera, con un rectángulo networkingondeado cortado de la vista mate.

He estado intentando lograr esto con maskLayer of UIView, presentado con iOS 8 y ha sido tremendamente infructuoso.

A continuación, se muestra cómo se ve mi código:

// 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 networkingColor]; [blurView setMaskView:mask]; // Remove this line, and everything is frosted. Keeping this line and nothing is frosted. 

Como indican mis comentarios, agregar la máscara elimina por completo la vista mate (cambiar la opacidad de la máscara no hace nada). Sé que esto no creará el efecto que estoy buscando (solo debe ser helado en ese rectángulo), pero no puedo hacer que maskView funcione en ninguna capacidad.

El api UIView dice

Una vista opcional cuyo canal alfa se utiliza para enmascarar el contenido de una vista.

La mejor manera de ver esto es utilizar un UIImageView cargado con una image RGBA que luce un canal alfa: un PNG exportado con transparencia activada desde photoshop lo hará. Y luego cambiar el tamaño, con el origen establecido en 0,0.

Una segunda forma de hacerlo sería crear una UIView, sin alfa, es decir [UIColor clearColor] y agregar una subvista que tenga un alfa [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; 

Puede agregar otras UIViews que son traslúcidas en x cantidad usando [UIColor colorFromRed: green: blue: alpha:x];