스위프트 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 확장 으로 인해 색상 변경이 즉시 발생합니다 ..