objective animatedimage ios xcode uiimageview uibutton tintcolor

ios - animatedimage - objective c uiimage



Usar color Tinte en UIImageView (9)

En lugar de este código:

[image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

Deberías:

image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

Tengo mi propia subclase de UIButton . Agrego UIImageView en él y agrego una imagen. Me gustaría pintar sobre la imagen con el color del tinte, pero no funciona.

hasta ahora tengo:

- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.backgroundColor = [UIColor clearColor]; self.clipsToBounds = YES; self.circleView = [[UIView alloc]init]; self.circleView.backgroundColor = [UIColor whiteColor]; self.circleView.layer.borderColor = [[Color getGraySeparatorColor]CGColor]; self.circleView.layer.borderWidth = 1; self.circleView.userInteractionEnabled = NO; self.circleView.translatesAutoresizingMaskIntoConstraints = NO; [self addSubview:self.circleView]; self.iconView = [[UIImageView alloc]init]; [self.iconView setContentMode:UIViewContentModeScaleAspectFit]; UIImage * image = [UIImage imageNamed:@"more"]; [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; self.iconView.image = image; self.iconView.translatesAutoresizingMaskIntoConstraints = NO; [self.circleView addSubview:self.iconView]; ...

y en la selección:

- (void) setSelected:(BOOL)selected { if (selected) { [self.iconView setTintColor:[UIColor redColor]]; [self.circleView setTintColor:[UIColor redColor]]; } else{ [self.iconView setTintColor:[UIColor blueColor]]; [self.circleView setTintColor:[UIColor blueColor]]; } }

¿Que hice mal? (el color de la imagen permanece siempre igual, como era original)


En swift 2.0+, puedes hacer:

let image = UIImage(named: "your_image_name")!.imageWithRenderingMode(.AlwaysTemplate) yourImageView.image = image yourImageView.tintColor = UIColor.blueColor()


Hacer la imageView

let imageView = UIImageView(frame: frame!) imageView.contentMode = .ScaleAspectFit imageView.tintColor = tintColor

Hacer la imagen

let mainBundle = NSBundle.mainBundle() var image = UIImage(named: filename!, inBundle: mainBundle, compatibleWithTraitCollection: nil) image = image?.imageWithRenderingMode(.AlwaysTemplate)

Conectarlos juntos

imageView?.image = image

Mostrarlo

view.addSubview(imageView)


La respuesta de @odemolliens debería funcionar.

Pero si todavía tiene problemas, asegúrese de que el color del tinte que está aplicando al UIImageView sea diferente del que se define en el Interface Builder.


También puede configurar esto en su activo. Asegúrese de que su imagen contenga todos los píxeles blancos + transparente.


Un paso mas alla. Esta es una subclase de UIImageView. (Solución no exacta para la pregunta original.) Úselo en Interface Builder estableciendo el nombre de la clase en TintedImageView. Actualizaciones en tiempo real dentro del diseñador a medida que cambia el color del tinte.

(Swift 3.1, Xcode 8.3)

import UIKit @IBDesignable class TintedImageView: UIImageView { override func prepareForInterfaceBuilder() { self.configure() } override func awakeFromNib() { super.awakeFromNib() self.configure() } @IBInspectable override var tintColor: UIColor! { didSet { self.configure() } } private func configure() { self.image = self.image?.withRenderingMode(UIImageRenderingMode.alwaysTemplate) } }


todo lo dicho es correcto. mi contribución Si no puede / no quiere postularse a cada UiImageView, O si necesita más eficiencia, necesita procesar ONCE (o ejemplo para las celdas de las tablas)

func tint(with color: UIColor) -> UIImage { var image = withRenderingMode(.alwaysTemplate) UIGraphicsBeginImageContextWithOptions(size, false, scale) color.set() image.draw(in: CGRect(origin: .zero, size: size)) image = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() return image }

Y establezca en todos los elementos de UI este UIImage.


(No se puede editar la publicación de @Zhaolong Zhong)

En swift 3.0 , puedes hacer:

let image = UIImage(named: "your_image_name")!.withRenderingMode(.alwaysTemplate) yourImageView.image = image yourImageView.tintColor = UIColor.blue


C objetivo

self.imgView.image = [self.imgView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; [self.imgView setTintColor:[UIColor darkGrayColor]];