Swift 3 :
Giải pháp này có thể thoải mái nếu bạn đã giải quyết hình ảnh của mình thông qua trình tạo giao diện xCode. Về cơ bản, bạn có một tiện ích mở rộng để tô màu cho hình ảnh:
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
}
}
Sau đó, bạn có thể chuẩn bị tiện ích mở rộng UIButton này để tô màu hình ảnh cho một trạng thái cụ thể:
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)
}
}
}
Sử dụng:
myButton.imageWith(.red, for: .normal)
PS (hoạt động tốt trong các ô của bảng, bạn không cần gọi setNeedDisplay()
phương thức, việc thay đổi màu ngay lập tức là do phần mở rộng UIImage ..