¿Qué necesito para enmascarar un UIImageView y cómo lo hago en Swift 3?

Me preguntaba qué necesitaría si quisiera usar una image de máscara para get mi UIImageView en una forma específica. Por lo que entiendo, para crear una máscara, necesito tener una image con la forma de la máscara todo negro sobre background blanco. Algo así, por ejemplo:

Imagen de máscara en forma de estrella

En primer lugar, ¿es suficiente para dar forma a una vista de image y, de ser así, cómo lo hago en Swift 3? Solo puedo encontrar el código de máscara que está desactualizado o escrito en Objective-C. Intenté simplemente asignar la image anterior a una UIImageView y luego asignar la vista de la image a la propiedad de la mask de la UIImageView que quiero configurar, así:

 self.defaultImageView.mask = self.maskImageView 

Esto no hizo nada. Simplemente hizo desaparecer self.maskImageView (la vista de la image se agrega a través del guión gráfico y se conecta mediante IBOutlet properties de IBOutlet ). Estoy seguro de que estoy olvidando hacer algo. No puede ser tan simple. Le agradecería que alguien me ayudara. Como dije, coloqué ambas vistas de imágenes exactamente en el mismo lugar, una encima de la otra, en el guión gráfico.

ACTUALIZACIÓN: Mi primer bash de configurar la máscara mediante progtwigción después de eliminarla de mi guión gráfico.

 let layer:CALayer = CALayer() let mask:UIImage = UIImage(named: "Black-Star-Photographic-Agency")! layer.contents = mask layer.frame = CGRect(x: 0, y: 0, width: ((self.defaultImageView.image?.size.width)!), height: (self.defaultImageView.image?.size.height)!) self.defaultImageView.layer.mask = layer self.defaultImageView.layer.masksToBounds = true 

El resultado fue que la vista de la image había desaparecido por completo y ya no era visible. ¿Estoy haciendo algo, estoy olvidando algo o ambos?

Debe usar una image png, que sea compatible con la transparencia, a diferencia de jpg.

En Photoshop, su image debería ser similar a esta:

introduzca la descripción de la imagen aquí

No importa si tu forma es negra o blanca. Lo que importa es la transparencia de cada píxel. El área opaca (negro en este caso) será visible y el área transparente se recortará.

Editar:

No debería crear una vista de máscara desde el guión gráfico si lo hace. No va a ser una parte de su jerarquía de vista. Simplemente agréguela de manera programática así:

 let maskView = UIImageView() override func viewDidLoad() { super.viewDidLoad() maskView.image = UIImage(named: "mask") imageView.mask = maskView } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() maskView.frame = imageView.bounds } 

Salida:

introduzca la descripción de la imagen aquí

Aquí hay un proyecto de testing para mostrar cómo está funcionando.

Además, si está utilizando una image / marco personalizado y se ejecuta en la máscara que no se muestra correctamente, intente configurar el modo de contenido de la máscara:

 maskView.contentMode = .scaleAspectFit