¿Es posible modificar un UIImage
's renderingMode
de un editor de guión gráfico o xib?
El objetivo es aplicar tintColor
al UIImageView
objeto en particular .
ios
ios7
xcode-storyboard
Artem Stepanenko
fuente
fuente
Puede establecer el modo de representación de imágenes no en el
.xib
archivo, sino en una.xcassets
biblioteca.Después de agregar una imagen a una biblioteca de activos, seleccione la imagen y abra el inspector de atributos en el lado derecho de Xcode. Busque el atributo 'Renderizar como' y establézcalo en 'plantilla'.
Después de configurar el modo de representación de una imagen, se puede añadir un color de tinte a la
UIImageView
de una.xib
o.storyboard
archivo para ajustar el color de la imagen.Esto establece la propiedad en la imagen donde sea que se use en lugar de solo en un archivo de generador de interfaz, pero en casi todos los casos (que he encontrado) este es el comportamiento que desea.
Algunas cosas a tener en cuenta:
UIImageView
. No he mirado tan profundamente.UIKitComponents
imágenes comoUIButton
las de yUIBarButtonItem
.fuente
UIImageView
, por lo que el color de tinte no siempre se muestra al ejecutar la aplicación.Usar el modo de renderizado de plantillas con UIImageView en un guión gráfico o xib tiene muchos errores, tanto en iOS 7 como en iOS 8.
En iOS 7
El UIImage no se decodifica correctamente desde el guión gráfico / xib. Si inspecciona la
imageView.image.renderingMode
propiedad en elviewDidLoad
método, notará que siempre lo esUIImageRenderingModeAutomatic
, incluso si lo establece en Renderizar como imagen de plantilla en su archivo xcassets.Para solucionarlo, debe configurar manualmente el modo de renderizado:
En iOS 8
El UIImage está correctamente decodificado y su
renderingMode
propiedad refleja lo que se eligió en el archivo xcassets, pero la imagen no está teñida.Para solucionarlo, tiene dos opciones:
tintColor
propiedad en Atributos de tiempo de ejecución definidos por el usuario en lugar del panel del inspector de atributos.o
Puede elegir su opción preferida, ambos matizan correctamente la imagen.
(Si está compilando con Xcode 6.2, solo hacerlo
self.imageView.tintColor = self.imageView.tintColor;
es suficiente, pero esto ya no funciona si está compilando con Xcode 6.3)Conclusión
Si necesita admitir tanto iOS 7 como iOS 8, necesitará ambas soluciones. Si solo tiene que admitir iOS 8, solo se necesita una solución alternativa.
fuente
La configuración de imageView RenderingMode para usar el color de tinte en el guión gráfico se puede reducir a una sola línea:
Luego, la imagen y el color del tinte se pueden configurar en el Storyboard.
fuente
Puede solucionar problemas de .xib con una extensión:
Fuente: https://gist.github.com/buechner/3b97000a6570a2bfbc99c005cb010bac
Increíble, este error ha existido durante unos 4-5 años.
fuente
No puede establecer
renderingMode
ni desdestoryboard
nixib
. Podría acceder mediante programación.ex:
fuente
UIImage *selectedImage = [unSeletedImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
Establezca tintColor & Class en Storyboard.
fuente
Es muy facil de arreglar
Simplemente cree la clase UIImageViewPDF y úsela en su guión gráfico
fuente
Otra solución es crear una
UIImageView
subclase:Luego, configure la clase en Interface Builder en
TemplateImageView
.fuente
Forma sencilla de configurar desde Storyboard:
Funciona bien en iOS 10 y Swift 3
fuente
En iOS 9, la configuración de la
tintColor
propiedad en Interface Builder todavía tiene errores.Tenga en cuenta que una solución de trabajo además de escribir líneas que modifican directamente las
ImageView
propiedades es establecer Renderizar como: Imagen de plantilla en el catálogo de activos y llamar, por ejemplo:fuente
Solucioné este problema agregando un atributo de tiempo de ejecución
tintColor
en el generador de interfaces.NOTA: Aún necesitará configurar su imagen para que se renderice como una imagen de plantilla en su archivo Images.xcassets.
fuente
Si crea un IBOutlet, puede cambiarlo en su método awakeFromNib así ...
Si bien la respuesta de @ Moby es más correcta, esto podría ser más conciso.
fuente
¡Loco, este error todavía está en iOS 12.1! Para guiones gráficos / xibs: agregar una etiqueta a UIImageView puede ser una solución rápida.
Rápido 4.2
fuente
En el guión gráfico, seleccione UIImageView y seleccione el inspector, establezca la propiedad
renderModeTemplate
=On
En el guión gráficofuente
Como Rudolf también mencionó anteriormente , definiría una clase simple, como esta:
Después de esta definición, simplemente agregue una Vista de imagen al guión gráfico y seleccione su clase personalizada como
TintImage
. Esto activará la selección "Tinte" en el guión gráfico.fuente