ios swift uiimageview mask
Aquí

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



mask (2)

Me preguntaba qué necesitaría si quisiera usar una imagen de máscara para obtener mi UIImageView en una forma específica. Por lo que entiendo, para crear una máscara, necesito tener una imagen con la forma de la máscara totalmente negra sobre un fondo blanco. Algo como esto, por ejemplo:

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

self.defaultImageView.mask = self.maskImageView

Esto no hizo nada. Acaba de hacer que self.maskImageView desaparezca (ambas vistas de imágenes se agregan a través del guión gráfico y se conectan usando IBOutlet propiedades de IBOutlet ). Estoy seguro de que me estoy olvidando de hacer algo. No puede ser así de simple. Apreciaría si alguien pudiera ayudarme. Como dije, puse ambas vistas de la imagen en el mismo lugar, una encima de la otra, en el guión gráfico.

ACTUALIZACIÓN: Mi primer intento de configurar la máscara mediante programació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 imagen había desaparecido por completo y ya no era visible. ¿Estoy haciendo algo, estoy olvidando algo o ambas cosas?


Además, si está utilizando un marco / imagen personalizada 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


Debería usar una imagen png, que admite transparencia, a diferencia de jpg.

En Photoshop, su imagen debería verse similar a esta:

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

Editar:

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

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:

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