¿Agregar máscara semi transparente a CALayer?

Estoy tratando de oscurecer el área circundante de mi UIImageView, y dejo una parte sola (que defino con mi máscara).

En este momento estoy definiendo mi máscara y configurando mi imageView.layer.mask, sin embargo, en lugar de oscurecer el rest de la image, la está eliminando por completo.

Ejemplo del tipo de efecto que deseo: http://i.imgur.com/vVUiuyk.png

Ejemplo de lo que obtengo: http://i.imgur.com/5DTXo0S.png

Los documentos de reference mencionan que la máscara usa su alfa de capa, así que he intentado manipular la opacidad de la máscara. Sin embargo, eso solo parece afectar la opacidad de la porción que quiero dejar sola, mientras que el rest de la image todavía se está cortando por completo.

¿Alguien puede señalar lo que estoy haciendo mal? Gracias.

Aquí está mi código:

CAShapeLayer *mask = [CAShapeLayer layer]; GMutablePathRef path = CGPathCreateMutable(); CGPathMoveToPoint(path, nil, 1052, 448); CGPathAddLineToPoint(path, nil, 2, 484); CGPathAddLineToPoint(path, nil, 54, 1263); CGPathAddLineToPoint(path, nil, 56, 1305); CGPathAddLineToPoint(path, nil, 380, 1304); CGPathAddLineToPoint(path, nil, 1050, 1311); CGPathCloseSubpath(path); mask.path = path; CGPathRelease(path); //mask.opacity = 0.5; //doesn't affect the surrounding portion, only the cut out area. self.imageView.layer.mask = mask; 

Lo que está haciendo mal es usar una máscara de capa en primer lugar. Estás tratando de oscurecer u oscurecer un área de tu image. ¡Eso no es lo que hace una máscara de capa! Básicamente, una máscara de capa atraviesa una capa existente, haciendo que lo que sea detrás de ella se muestre. Eso es exactamente lo que descubriste:

la está eliminando por completo

Sí, porque eso es lo que hacen las máscaras de capa. Si no quieres eso, ¿por qué estás usando una máscara de capa?

Lo que quiere es colocar una segunda vista de image (o solo una subcapa) sobre la primera. Contiene una image que dibujas. Es transparente excepto donde tiene un relleno de color oscuro semitransparente. Eso oscurecerá lo que hay detrás. Utiliza una ruta de recorte para definir el área que no consigue el relleno de color oscuro.

Alternativamente, modifique la image en la vista de su image dibujando encima con composition o posiblemente utilizando un CIFilter.