cocoa-touch uiview calayer mask cgpath

cocoa touch - CGPath de la imagen



cocoa-touch uiview (2)

Tendrá que crear su imagen con un canal alfa. De acuerdo con la documentación de la propiedad de máscara de CALayer :

Una capa opcional cuyo canal alfa se usa como una máscara para seleccionar entre el fondo de la capa y el resultado de la composición de los contenidos de la capa con su fondo filtrado.

Entonces, la capa que desea usar como máscara necesita un canal alfa. Si desea usar una imagen para crear dicho canal, la imagen en sí necesita tener un canal alfa. Por lo tanto, deberá copiar la máscara en blanco y negro que publicó anteriormente en el canal alfa de una imagen. El color de esa imagen particular es ignorado. A continuación, carga la imagen, establece el contenido de las capas y utiliza esa capa como una máscara de capas diferente. Algo alrededor de esto:

UIImage* imageWithAlphaChannel = [UIImage imageNamed:@"alpha.png"]; // Won''t work with jpg CGImageRef cgImageWithAlpha = [imageWithAlphaChannel CGImage]; CALayer* maskingLayer = [CALayer layer]; maskingLayer.contents = (id)cgImageWithAlpha; //Assume viewToBeMasked is the view, who''s layer needs to be masked CALayer* layerToBeMasked = viewToBeMasked.layer; layerToBeMasked.mask = maskingLayer; maskingLayer.frame = layerToBeMasked.bounds; //Alternativly use: viewToBeMasked.layer.mask = maskingLayer;

Codificado en el navegador, excusa los errores sísmicos.

Almacenar todas sus máscaras como archivos png puede hacer explotar el tamaño de su aplicación. Puede almacenar las máscaras como jpgs y crear la versión alfa apropiada en tiempo de ejecución utilizando las funciones de dibujo de CoreGraphics. Pero esa es otra pregunta .....

Necesito crear una máscara basada en la imagen (cualquier forma posible). Necesito:

  1. Crear CALayer con CGPath como una máscara adecuada
  2. Llamar a [UIView.layer setMask: con la capa de arriba]

Entonces, la gran pregunta principal es cómo configurar CGPath en base a una imagen en blanco y negro. ¿O es posible colocar la máscara directamente desde la imagen?

¡Gracias!

Imagen de ejemplo de una máscara:


Problema muy similar, creo que a algo que hice hace un tiempo. Básicamente, deberá exportar el archivo desde Adobe Illustrator y luego ejecutar una rutina para convertir ese archivo a CGPath.

Encontrarás cómo hacerlo en mi respuesta a esta pregunta:

¿Cómo detectar / manejar eventos táctiles en regiones curvas?