web-dev-qa-db-ja.com

Swift)でUIImageの色を変更する方法

私はSwiftにいて、UIImageとUIColorを取り込んで、色を変更したUIImageを返す関数を生成しようとしています。

私はUIImageViewを使用していません。これらは、アイコンとして使用する予定のUIImageです。これを実装する良い方法はありますか?

7
TJBlack31

編集/更新:

IOS10 +の場合、UIGraphicsImageRendererを使用できます。

Xcode11•Swift5.1

_extension UIImage {
    func tinted(with color: UIColor, isOpaque: Bool = false) -> UIImage? {
        let format = imageRendererFormat
        format.opaque = isOpaque
        return UIGraphicsImageRenderer(size: size, format: format).image { _ in
            color.set()
            withRenderingMode(.alwaysTemplate).draw(at: .zero) 
        }
    }
}
_

遊び場テスト

_let camera = UIImage(data: try! Data(contentsOf: URL(string: "https://cdn4.iconfinder.com/data/icons/ionicons/512/icon-camera-128.png")!))!
let redCamera = camera.tinted(with: .red)
_

元の答え

UIGraphicsBeginImageContextWithOptionsを使用して、画像コンテキストを開始し、目的の色を設定し、画像のメソッドfunc draw(in rect: CGRect)を使用して、レンダリングモード_.alwaysTemplate_を使用してアイコン画像を描画できます。

_extension UIImage {
    func tinted(with color: UIColor) -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        defer { UIGraphicsEndImageContext() }
        color.set()
        withRenderingMode(.alwaysTemplate)
            .draw(in: CGRect(Origin: .zero, size: size))
        return UIGraphicsGetImageFromCurrentImageContext()
    }
}
_

enter image description here

24
Leo Dabus

PNG画像を使用する場合(アイコンのために私が思うように)-単に使用してください:

let originalImage = UIImage(named: "iconName")
let tintedImage = originalImage?.withRenderingMode(.alwaysTemplate)
yourButton.setImage(tintedImage, forState: .normal)
yourButton.tintColor = UIColor.blue //change color of icon
6
derdida

iOS 13以降(Swift 5.1):

宣言

func withTintColor(_ color: UIColor) -> UIImage

使用法:

yourUIImage.withTintColor(color: UIColor)
0
Paul