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.
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]];