titletextattributes color bar ios objective-c uiimage uicolor tintcolor

ios - bar - ¿Cómo puedo cambiar la imagen tintColor



uinavigationitem title color (11)

Así es como aplico y uso los tintes en IOS 9 con Swift.

//apply a color to an image //ref - http://stackoverflow.com/questions/28427935/how-can-i-change-image-tintcolor //ref - https://www.captechconsulting.com/blogs/ios-7-tutorial-series-tint-color-and-easy-app-theming func getTintedImage() -> UIImageView { var image : UIImage; var imageView : UIImageView; image = UIImage(named: "someAsset")!; let size : CGSize = image.size; let frame : CGRect = CGRectMake((UIScreen.mainScreen().bounds.width-86)/2, 600, size.width, size.height); let redCover : UIView = UIView(frame: frame); redCover.backgroundColor = UIColor.redColor(); redCover.layer.opacity = 0.75; imageView = UIImageView(); imageView.image = image.imageWithRenderingMode(UIImageRenderingMode.Automatic); imageView.addSubview(redCover); return imageView; }

Recibo una imagen de un servidor, luego, según el color elegido por el usuario, el color de la imagen cambiará.

Intenté lo siguiente:

_sketchImageView.image = [_sketchImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; [_sketchImageView setTintColor:color];

Obtuve lo contrario de mi objetivo (el color blanco fuera de UIImage está coloreado con el color elegido).

que va mal

Necesito hacer lo mismo en esta pregunta, la solución provista no resuelve mi caso. ¿Cómo puedo cambiar la imagen tintColor en iOS y WatchKit?


En Swift 2.0 puedes usar este

let image = UIImage(named:"your image name")?.imageWithRenderingMode(.AlwaysTemplate) let yourimageView.tintColor = UIColor.redColor() yourimageView.image = image

En Swift 3.0 puedes usar esto

let image = UIImage(named:"your image name")?.withRenderingMode(.alwaysTemplate) let yourimageView.tintColor = UIColor.red yourimageView.image = image


En Swift 3.0 puede usar esta extensión: [Basado en la solución object-c de @ VietHung]

extension UIImage { func imageWithColor(_ color: UIColor) -> UIImage? { var image = imageWithRenderingMode(.alwaysTemplate) UIGraphicsBeginImageContextWithOptions(size, false, scale) color.set() image.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height)) image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } }


En Swift puede usar esta extensión: [Basado en la solución object-c de @ VietHung]

extension UIImage { func imageWithColor(color: UIColor) -> UIImage? { var image = imageWithRenderingMode(.AlwaysTemplate) UIGraphicsBeginImageContextWithOptions(size, false, scale) color.set() image.drawInRect(CGRect(x: 0, y: 0, width: size.width, height: size.height)) image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } }


Intenta generar nueva imagen por ti mismo.

UIImage *newImage = [_sketchImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; UIGraphicsBeginImageContextWithOptions(image.size, NO, newImage.scale); [yourTintColor set]; [newImage drawInRect:CGRectMake(0, 0, image.size.width, newImage.size.height)]; newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); _sketchImageView.image = newImage;

Y úsalo.

Buena suerte

======= ACTUALIZACIÓN =======

Esta solución solo cambiará el color de la imagen de todos los píxeles.

Ejemplo: tenemos una imagen de libro: http://pngimg.com/upload/book_PNG2113.png

Y después de ejecutar el código anterior (exp: TintColor es ROJO). Tenemos:

SO: cómo es su imagen depende de cómo la diseñó


Intente establecer el color del tinte en la vista de la vista de imagen. Por ejemplo, [self.view setTintColor:color];


Para Swift 3.0, hice una subclase personalizada de UIImageView llamada TintedUIImageView. Ahora la imagen utiliza cualquier color de tinte establecido en el generador de interfaz o el código

class TintedUIImageView: UIImageView { override func awakeFromNib() { if let image = self.image { self.image = image.withRenderingMode(.alwaysTemplate) } } }


Prueba algo como esto

UIImage *originalImage = _sketchImageView.image UIImage *newImage = [originalImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,50,50)]; // your image size imageView.tintColor = [UIColor redColor]; // or whatever color that has been selected imageView.image = newImage; _sketchImageView.image = imageView.image;

Espero que esto ayude.


Puedes probar:

_sketchImageView.image = [self imageNamed:@"imageName" withColor:[UIColor blackColor]]; - (UIImage *)imageNamed:(NSString *)name withColor:(UIColor *)color { // load the image //NSString *name = @"badge.png"; UIImage *img = [UIImage imageNamed:name]; // begin a new image context, to draw our colored image onto UIGraphicsBeginImageContext(img.size); // get a reference to that context we created CGContextRef context = UIGraphicsGetCurrentContext(); // set the fill color [color setFill]; // translate/flip the graphics context (for transforming from CG* coords to UI* coords CGContextTranslateCTM(context, 0, img.size.height); CGContextScaleCTM(context, 1.0, -1.0); // set the blend mode to color burn, and the original image CGContextSetBlendMode(context, kCGBlendModeColorBurn); CGRect rect = CGRectMake(0, 0, img.size.width, img.size.height); CGContextDrawImage(context, rect, img.CGImage); // set a mask that matches the shape of the image, then draw (color burn) a colored rectangle CGContextClipToMask(context, rect, img.CGImage); CGContextAddRect(context, rect); CGContextDrawPath(context,kCGPathFill); // generate a new UIImage from the graphics context we drew onto UIImage *coloredImg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); //return the color-burned image return coloredImg; }


Una cosa que puede hacer es simplemente agregar sus imágenes a la carpeta Activos en XCode y luego cambiar el modo de renderización a Imagen de plantilla, por lo que cada vez que cambie el color del tinte de UIImageView, cambiará automáticamente la imagen.

Revise este enlace -> https://www.google.co.in/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&cad=rja&uact=8&ved=0ahUKEwiM0YXO0ejTAhUIQ48KHfGpBpgQjRwIBw&url=https%3A%2F%2Fkrakendev.io%2Fblog%2F4-xcode-asset-catalog-secrets-you-need-to-know&psig=AFQjCNGnAzVn92pCqM8612o1R0J9q1y7cw&ust=1494619445516498


en Swift 4 puedes simplemente hacer una extensión como esa:

import UIKit extension UIImageView { func tintImageColor(color: UIColor) { guard let image = image else { return } self.image = image.withRenderingMode(UIImageRenderingMode.alwaysTemplate) self.tintColor = color } }