How to apply a tintColor to a UIImage?
If you are just supporting iOS 7 you can use tintColor
and UIImageRenderingModeAlwaysTemplate
This article covers that:
https://www.captechconsulting.com/blogs/ios-7-tutorial-series-tint-color-and-easy-app-theming
If you need to support an earlier version you may want to consider this thread
How would I tint an image programmatically on the iPhone?
Using Tint color on UIImageView
Instead of this code:
[image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
you should have:
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
Use this in Swift 4.1
image = UIImage(named: "name")!.withRenderingMode(.alwaysTemplate)
UIImageView doesn't always tint template image
Easy fix solution:
Just add a new runtime attribute which will set the tintColor of the UIImageView to the specified color and ensure the image is tinted.
You will still need to set your image to be rendered as a template image in your Images.xcassets file.
This way you dont need any additional outlets, extensions or lines of code.
Also take note:
It will not apply the tintColor in the user defined attribute if the tintColor on the view is the same color, they must be different.
UIImageView tintColor set, not applying color to image anyway
It seems to be a bug between Interface Builder and the code. When setting the tintColor to the same color, more than once, it does not change to the target color at runtime. Here I've fixed it by changing the color in Interface Builder because .tintColor
is set before the view appears.
Fixed by changing the color in the .xib
file to a color other than the intended one. Here I've changed it from white to brown:
How can I change image tintColor in iOS and WatchKit
iOS
For an iOS app, in Swift 3, 4 or 5:
theImageView.image = theImageView.image?.withRenderingMode(.alwaysTemplate)
theImageView.tintColor = UIColor.red
For Swift 2:
theImageView.image = theImageView.image?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
theImageView.tintColor = UIColor.redColor()
Meanwhile, the modern Objective-C solution is:
theImageView.image = [theImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[theImageView setTintColor:[UIColor redColor]];
Watchkit
In WatchKit for Apple Watch apps, you can set the tint color for a template image.
- You must add your image to an Asset Catalog in your WatchKit App, and set the image set to be rendered as a Template Image in the Attributes Inspector. Unlike for an iPhone app, you cannot set the template rendering in code in the WatchKit Extension at present.
- Set that image to be used in your WKInterfaceImage in interface builder for your app
- Create an IBOutlet in your WKInterfaceController for the WKInterfaceImage called 'theImage'...
To then set the tint color in Swift 3 or 4:
theImage.setTintColor(UIColor.red)
Swift 2:
theImage.setTintColor(UIColor.redColor())
To then set the tint color in Objective-C:
[self.theImage setTintColor:[UIColor redColor]];
If you use a template image and do not apply a tint colour, the Global Tint for your WatchKit app will be applied. If you have not set a Global Tint, theImage
will be tinted light blue by default when used as a template image.
How to change tintcolor to uiimage in cell loaded by sd_setImageWithURL?
You should be using SDWebImage
function with completion block. Try this.
cell.icon.tintColor = [UIColor yellowColor];
[cell.icon sd_setImageWithURL:[NSURL URLWithString:myURL] placeholderImage:[UIImage imageNamed:imageName] options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
cell.icon.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
}];
UIImageView template image tint color changes on UITableViewCell click
Ok, yes, @Aakash and @HiteshAgarwal are right, here is a solution to my problem. I set tint color in cellForRowAt
delegate method and it changed to required color (though I still do not know why Storyboard approach failed and why manual color setting is required):
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = super.tableView(tableView, cellForRowAt: indexPath)
let bgColorView = UIView()
bgColorView.backgroundColor = cellSelection
cell.selectionStyle = .default
cell.backgroundColor = .clear
cell.selectedBackgroundView = bgColorView
if let imageView = getCellImageView(cell) {
imageView.tintColor = UIColor.white
}
return cell
}
Related Topics
How to Do Transforms on a Calayer
How to Change Color of Uitableviewcell When Selecting
Disabled Uibutton Not Faded or Grey
Get Selected Index of Uitableview
Create and Store PDF Document Programmatically Using Swift for iOS
Swift Regex: Does a String Match a Pattern
Swift - Coredata Migration - Set New Attribute Value According to Old Attribute Value
Removing Badge from iOS App Icon
Swift 2.0 Minimum System Version Requirement (Deployment Target)
Firebase for iOS, Googleservice-Info.Plist Property "Is_Analytics_Enabled" Set to "No"
How to Know If Nsassert Is Disabled in Release Builds
How to Add a Footer to a Uitableview in Storyboard
Removing from Array During Enumeration in Swift
Nsarray with Nspredicate Using Not In
How to Get Indexpath in Prepareforsegue