Noté que cuando coloco un blanco o negro UIImage
en un UISegmentedControl
color, lo enmascara automáticamente para que coincida con el tono del control segmentado. Pensé que esto era realmente genial, y me preguntaba si podría hacer esto también en otro lugar. Por ejemplo, tengo un montón de botones que tienen una forma uniforme pero colores variados. En lugar de hacer un PNG para cada botón, ¿podría de alguna manera usar esta máscara de color para usar la misma imagen para todos ellos, pero luego establecer un color de tinte o algo para cambiar su color real?
294
Respuestas:
A partir de iOS 7, hay un nuevo método
UIImage
para especificar el modo de representación. El uso del modo de representaciónUIImageRenderingModeAlwaysTemplate
permitirá que el color de la imagen sea controlado por el color de tinte del botón.C objetivo
Rápido
fuente
tintColor
está demasiado oscuro, asegúrese deadjustsImageWhenHighlighted
que NO. (O en IB: "La imagen ajustada resaltada" no está marcada)Como Ric ya mencionó en su publicación , puede configurar el modo de representación en el código, también puede hacerlo directamente en el catálogo de imágenes, vea la imagen adjunta a continuación. Sólo hay que establecer la
Render As
aTemplate Image
Advertencia : he tenido problemas con iOS 7 y este enfoque. Entonces, si usa iOS 7 también, es posible que también desee hacerlo en código, como se describe aquí .
fuente
Los botones personalizados aparecen en sus respectivos colores de imagen. Al establecer el tipo de botón en "Sistema" en el guión gráfico (o
UIButtonTypeSystem
en el código), la imagen del botón tendrá el color de tinte predeterminado.(probado en iOS9, Xcode 7.3)
fuente
Debe establecer el modo de representación de imagen
UIImageRenderingModeAlwaysTemplate
en para quetintColor
afecte el UIImage. Aquí está la solución en Swift:SWIFT 4x
fuente
Si tiene un botón personalizado con una imagen de fondo. Puede configurar el color de tinte de su botón y anular la imagen con los siguientes.
En los activos, seleccione el fondo del botón que desea establecer el color de tinte.
En el inspector de atributos de la imagen, configure el valor de representación como "Imagen de plantilla"
Ahora, cada vez que configure
button.tintColor = UIColor.red
su botón, se mostrará en rojo.fuente
En Swift puedes hacerlo así:
Luego, en su punto de vista
Y para modificar el color
EDITAR Xcode 8 ya se puede también sólo el modo de representación de la imagen en sus .xcassets a plantilla de la imagen y entonces no necesita declarar específicamente en el
var exampleImage
másfuente
No estoy seguro de lo que quiere exactamente, pero este método de categoría enmascarará un UIImage con un color específico para que pueda tener una sola imagen y cambiar su color a lo que desee.
ImageUtils.h
ImageUtils.m
Importe la categoría ImageUtils y haga algo como esto ...
fuente
kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast
enCGBitmapContextCreate
UIDevice
clase:CGFloat scale = [UIScreen mainScreen].scale; CGFloat width = self.size.width * scale; CGFloat height = self.size.height * scale;
lascale
propiedad existe a partir de iOS 4.0.scale
valor cuandoUIImage
se crea:UIImage *coloredImage = [UIImage imageWithCGImage:cImage scale:scale orientation:self.imageOrientation];
Swift 4 con customType:
fuente
Para Xamarin.iOS (C #):
fuente
Swift 3 :
Esta solución podría ser cómoda si ya ha configurado su imagen a través del generador de interfaces xCode. Básicamente tiene una extensión para colorear una imagen:
Luego, puede preparar esta extensión UIButton para colorear la imagen para un estado particular:
Uso:
PS (funciona bien también en las celdas de la tabla, no necesita llamar al
setNeedDisplay()
método, el cambio de color es inmediato debido a la extensión UIImage ..fuente
Si desea enmascarar manualmente su imagen, aquí hay un código actualizado que funciona con pantallas de retina
fuente
Deberías intentarlo
Después de configurar el marco
fuente
Swift 3.0
fuente
Cambiar la imagen del botón o el color de tinte de la vista de imagen Swift:
fuente
Nada de lo anterior funcionó para mí, porque el tinte se borró después de hacer clic. Tuve que usar
fuente