स्विफ्ट 3 :
यदि आप पहले से ही xCode इंटरफ़ेस बिल्डर के माध्यम से अपनी छवि को व्यवस्थित कर चुके हैं तो यह समाधान आरामदायक हो सकता है। मूल रूप से आपके पास एक छवि को रंग देने के लिए एक एक्सटेंशन है:
extension UIImage {
public func image(withTintColor color: UIColor) -> UIImage{
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
let context: CGContext = UIGraphicsGetCurrentContext()!
context.translateBy(x: 0, y: self.size.height)
context.scaleBy(x: 1.0, y: -1.0)
context.setBlendMode(CGBlendMode.normal)
let rect: CGRect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
context.clip(to: rect, mask: self.cgImage!)
color.setFill()
context.fill(rect)
let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return newImage
}
}
फिर, आप किसी विशेष राज्य के लिए छवि को रंगीन करने के लिए इस UIButton एक्सटेंशन को तैयार कर सकते हैं :
extension UIButton {
func imageWith(color:UIColor, for: UIControlState) {
if let imageForState = self.image(for: state) {
self.image(for: .normal)?.withRenderingMode(.alwaysTemplate)
let colorizedImage = imageForState.image(withTintColor: color)
self.setImage(colorizedImage, for: state)
}
}
}
उपयोग:
myButton.imageWith(.red, for: .normal)
पी एस (तालिका सेल में भी काम कर रहे हैं अच्छा है, तो आप कॉल करने के लिए की जरूरत नहीं है setNeedDisplay()
विधि, रंग के परिवर्तन के लिए तत्काल कारण है UIImage विस्तार ..