Wie kann ich das Bild tintColor in iOS und WatchKit ändern?

395

Ich habe eine UIImageView namens "theImageView", mit UIImage in einer einzigen Farbe (transparenter Hintergrund), genau wie das linke schwarze Herz unten. Wie kann ich die Farbtonfarbe dieses Bildes in iOS 7 oder höher programmgesteuert gemäß der in den iOS 7+ Navigationsleistensymbolen verwendeten Farbtonmethode ändern?

Kann diese Methode auch in WatchKit für eine Apple Watch-App funktionieren?

Geben Sie hier die Bildbeschreibung ein

zäh
quelle
4
Was meinst du mit „der folgende Code ist falsch“, eine Einstellung UIImagemit UIImageRenderingModeAlwaysTemplateund dann Einstellung UIImageVIew‚s tintColorarbeiten. (in meinem Code ^^)
Vinzzz
2
Verwenden Sie ein PNG mit Transparenz wie dieses
Alladinian
4
Sie sollten Ihre Antwort wirklich in den Antwortbereich verschieben, da ich denke, dass dies die beste und modernste ist.
Richard Venable
Ich wünschte, ich könnte diese Frage doppelt bewerten !!
Jacobo Koenig

Antworten:

763

iOS
Für eine iOS-App in Swift 3, 4 oder 5:

theImageView.image = theImageView.image?.withRenderingMode(.alwaysTemplate)
theImageView.tintColor = UIColor.red

Für Swift 2:

theImageView.image = theImageView.image?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
theImageView.tintColor = UIColor.redColor()

Inzwischen lautet die moderne Objective-C-Lösung:

theImageView.image = [theImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[theImageView setTintColor:[UIColor redColor]];

Watchkit
In WatchKit für Apple Watch-Apps können Sie die Farbtonfarbe für ein Vorlagenbild festlegen .

  1. Sie müssen Ihr Bild einem Asset-Katalog in Ihrer WatchKit-App hinzufügen und den Bildsatz festlegen, der im Attributinspektor als Vorlagenbild gerendert werden soll. Anders als bei einer iPhone-App können Sie das Rendern von Vorlagen derzeit nicht in Code in der WatchKit-Erweiterung festlegen.
  2. Legen Sie das Bild fest, das in Ihrem WKInterfaceImage im Interface Builder für Ihre App verwendet werden soll
  3. Erstellen Sie in Ihrem WKInterfaceController ein IBOutlet für das WKInterfaceImage mit dem Namen 'theImage' ...

So stellen Sie die Farbtonfarbe in Swift 3 oder 4 ein:

theImage.setTintColor(UIColor.red)

Swift 2:

theImage.setTintColor(UIColor.redColor())

So stellen Sie die Farbtonfarbe in Objective-C ein:

[self.theImage setTintColor:[UIColor redColor]];

Wenn Sie ein Vorlagenbild verwenden und keine Farbtonfarbe anwenden, wird der globale Farbton für Ihre WatchKit-App angewendet. Wenn Sie keinen globalen Farbton festgelegt haben, theImagewird dieser standardmäßig hellblau getönt, wenn er als Vorlagenbild verwendet wird.

Duncan Babbage
quelle
2
Dies ist die beste und einfachste Lösung.
Ankish Jain
4
imageWithRenderingMode ist zu langsam. In Storyboard- und Image-Assets. Sie können diese beiden auch ändern: Aktualisieren Sie den Render-Modus auf Vorlagenbild - das ist eine bessere Lösung
Katerina
Perfekt, jetzt verwende ich diese Methode basierend auf Ihrem Code: + (UIImageView ) tintImageView: (UIImageView *) imageView withColor: (UIColor ) color {imageView.image = [imageView.image imageWithRenderingMode: UIImageRenderingModeAlwaysTemplate]; [imageView setTintColor: color]; return imageView; }
Josep Escobar
ist es besser mit Bild schwarz?
Bruno
1
@ Bruno Bild muss nicht schwarz sein, nein. Funktioniert mit jeder Farbe.
Duncan Babbage
121

Hier ist eine Kategorie, die den Trick machen sollte

@interface UIImage(Overlay)
@end

@implementation UIImage(Overlay)

- (UIImage *)imageWithColor:(UIColor *)color1
{
        UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextTranslateCTM(context, 0, self.size.height);
        CGContextScaleCTM(context, 1.0, -1.0);
        CGContextSetBlendMode(context, kCGBlendModeNormal);
        CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
        CGContextClipToMask(context, rect, self.CGImage);
        [color1 setFill];
        CGContextFillRect(context, rect);
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return newImage;
}
@end

so würden Sie tun:

theImageView.image = [theImageView.image imageWithColor:[UIColor redColor]];
Ich bin amüsiert
quelle
Vielen Dank für diese sehr gültige Antwort. Ich denke, mein Code war von Anfang
zäh
104

Ich musste dies in Swift mit einem tun extension .

Ich dachte, ich würde erzählen, wie ich es gemacht habe:

extension UIImage {
    func imageWithColor(color1: UIColor) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
        color1.setFill()

        let context = UIGraphicsGetCurrentContext() as CGContextRef
        CGContextTranslateCTM(context, 0, self.size.height)
        CGContextScaleCTM(context, 1.0, -1.0);
        CGContextSetBlendMode(context, CGBlendMode.Normal)

        let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect
        CGContextClipToMask(context, rect, self.CGImage)
        CGContextFillRect(context, rect)

        let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage
        UIGraphicsEndImageContext()

        return newImage
    }
}

Verwendungszweck:

theImageView.image = theImageView.image.imageWithColor(UIColor.redColor())

Swift 4

extension UIImage {
    func imageWithColor(color1: UIColor) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
        color1.setFill()

        let context = UIGraphicsGetCurrentContext()
        context?.translateBy(x: 0, y: self.size.height)
        context?.scaleBy(x: 1.0, y: -1.0)
        context?.setBlendMode(CGBlendMode.normal)

        let rect = CGRect(origin: .zero, size: CGSize(width: self.size.width, height: self.size.height))
        context?.clip(to: rect, mask: self.cgImage!)
        context?.fill(rect)

        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return newImage!
    }
}

Verwendungszweck:

theImageView.image = theImageView.image?.imageWithColor(color1: UIColor.red)

Fulvio
quelle
1
Zu Ihrer Information, das hat bei mir nicht funktioniert, bis ich mich color1.setFill()rechts unter die erste Zeile der Methode bewegt habe UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale).
Aaron
@ Aaron Aktualisiert basierend auf Ihrem Kommentar. Vielen Dank.
Fulvio
7
@ CeceXX CGBlendMode.Normalstattdessen verwenden
Adolfo
2
Sie sind fantastisch, aber Sie müssen es möglicherweise in Swift 3
SimpuMind
1
@SimpiMind stattdessen Swift 4 bereitgestellt.
Fulvio
97

In Storyboard- und Image-Assets. Sie können diese beiden auch ändern:

Aktualisieren Sie den Rendermodus auf Vorlagenbild

Aktualisieren Sie den Rendermodus auf Vorlagenbild in Bildassets

Aktualisieren Sie die Farbtonfarbe in Ansichten.

Aktualisieren Sie die Farbtonfarbe in Ansichten in Ansichten

JerryZhou
quelle
22
Dies ist im Ernst die schlechteste Antwort!
Brandonscript
1
Das Festlegen dieses Werts über das Storyboard funktioniert bei mir nie. Ich muss immer imageView.tintColoraus Code verwenden.
Kamil Powałowski
3
@ KamilPowałowski für mich funktioniert das manchmal ... ich bin mir nicht sicher warum. Ich wünschte ich wüsste warum es nicht immer funktioniert. Also mache ich es am Ende per Code
Jesus Rodriguez
2
Für mich funktioniert diese Storyboard-Methode mit Schaltflächen, aber nicht mit imageViews. Ich muss noch tintColor im Code für imageViews festlegen.
Derek Soike
2
Falls sich noch jemand am Kopf kratzt und sich fragt, warum es in IB nicht funktioniert, setzen Sie das Opaque von imageView auf Nein.
Bonan
40

Swift 4

Ändern Sie den Farbton von UIImage SVG / PDF , der für Bilder mit eindeutiger Farbe geeignet ist :

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

import Foundation

// MARK: - UIImage extensions

public extension UIImage {

    //
    /// Tint Image
    ///
    /// - Parameter fillColor: UIColor
    /// - Returns: Image with tint color
    func tint(with fillColor: UIColor) -> UIImage? {
        let image = withRenderingMode(.alwaysTemplate)
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        fillColor.set()
        image.draw(in: CGRect(origin: .zero, size: size))

        guard let imageColored = UIGraphicsGetImageFromCurrentImageContext() else {
            return nil
        }

        UIGraphicsEndImageContext()
        return imageColored
    }
}

Ändern Sie den Farbton von UIImageView , der für Bilder mit eindeutiger Farbe geeignet ist :

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

let imageView = UIImageView(frame: CGRect(x: 50, y: 50, width: 50, height: 50))
imageView.image = UIImage(named: "hello.png")!.withRenderingMode(.alwaysTemplate)
imageView.tintColor = .yellow

Ändern Sie den Farbton von UIImage für das Bild . Verwenden Sie Folgendes :

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

import Foundation

// MARK: - Extensions UIImage

public extension UIImage {

    /// Tint, Colorize image with given tint color
    /// This is similar to Photoshop's "Color" layer blend mode
    /// This is perfect for non-greyscale source images, and images that 
    /// have both highlights and shadows that should be preserved<br><br>
    /// white will stay white and black will stay black as the lightness of 
    /// the image is preserved
    ///
    /// - Parameter TintColor: Tint color
    /// - Returns:  Tinted image
    public func tintImage(with fillColor: UIColor) -> UIImage {

        return modifiedImage { context, rect in
            // draw black background - workaround to preserve color of partially transparent pixels
            context.setBlendMode(.normal)
            UIColor.black.setFill()
            context.fill(rect)

            // draw original image
            context.setBlendMode(.normal)
            context.draw(cgImage!, in: rect)

            // tint image (loosing alpha) - the luminosity of the original image is preserved
            context.setBlendMode(.color)
            fillColor.setFill()
            context.fill(rect)

            // mask by alpha values of original image
            context.setBlendMode(.destinationIn)
            context.draw(context.makeImage()!, in: rect)
        }
    }

    /// Modified Image Context, apply modification on image
    ///
    /// - Parameter draw: (CGContext, CGRect) -> ())
    /// - Returns:        UIImage
    fileprivate func modifiedImage(_ draw: (CGContext, CGRect) -> ()) -> UIImage {

        // using scale correctly preserves retina images
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        let context: CGContext! = UIGraphicsGetCurrentContext()
        assert(context != nil)

        // correctly rotate image
        context.translateBy(x: 0, y: size.height)
        context.scaleBy(x: 1.0, y: -1.0)

        let rect = CGRect(x: 0.0, y: 0.0, width: size.width, height: size.height)

        draw(context, rect)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image!
    }
}
YannSteph
quelle
1
Hey, ich bin schnell neu, aber du hast hier gesagt, dass es sich um SVG-Bilder handelt, aber ich kann keinen Weg finden, die SVG in UIImage zu analysieren. Könntest du mir helfen? oder vielleicht kann ich das mit der SVG irgendwie richtig machen. Vielen Dank!
Dumitru Rogojinaru
@ DumitruRogojinaru verwenden SVG-Funktion mit Vorlagenbild im Asset
YannSteph
Warum ist es notwendig, "func modifiedImage" zu übersetzen und zu skalieren?
Luca Davanzo
Update für Swift 4
YannSteph
36

Wenn jemand eine Lösung interessiert ohne UIImageView:

// (Swift 3)
extension UIImage {
    func tint(with color: UIColor) -> UIImage {
        var image = withRenderingMode(.alwaysTemplate)
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        color.set()

        image.draw(in: CGRect(origin: .zero, size: size))
        image = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return image
    }
}
Puttin
quelle
Wow, funktioniert wie Magie, nachdem man eine Stunde lang danach gesucht hat. Erforderlich für: Festlegen eines Symbols in einem NSTextAttachment in einer anderen Farbe als die ursprüngliche des Symbols. Die Standardantwort für die Verwendung einer UIImageView und die Änderung ihrer tintColor funktioniert hier nicht, da NSTextAttachment die UIImageView nicht verwendet.
Marco
1
Dies ist die beste Lösung, die ich bisher gefunden habe, insbesondere für alle, die nach Code suchen, der mit Swift 3 funktioniert. Großartiger Vorschlag!
Shashwat
17

Mit Swift

let commentImageView = UIImageView(frame: CGRectMake(100, 100, 100, 100))
commentImageView.image = UIImage(named: "myimage.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
commentImageView.tintColor = UIColor.blackColor()
addSubview(commentImageView)
Esqarrouth
quelle
3
Sie können einfach sagen .AlwaysTemplate.
Rui Peres
Ja, es verkürzt den Code, aber es scheint, als würde es die Klarheit des Codes verringern.
Ich bin
Ich sehe deine POV, nur eine Alternative.
Rui Peres
4

Versuche dies

http://robots.thoughtbot.com/designing-for-ios-blending-modes

oder

- (void)viewDidLoad
{
[super viewDidLoad];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 300, 50)];
label.numberOfLines = 0;
label.font = [UIFont systemFontOfSize:13];
label.text = @"These checkmarks use the same gray checkmark image with a tintColor applied to the image view";
[self.view addSubview:label];

[self _createImageViewAtY:100 color:[UIColor purpleColor]];
}

- (void)_createImageViewAtY:(int)y color:(UIColor *)color {
UIImage *image = [[UIImage imageNamed:@"gray checkmark.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
CGRect frame = imageView.frame;
frame.origin.x = 100;
frame.origin.y = y;
imageView.frame = frame;

if (color)
    imageView.tintColor = color;

[self.view addSubview:imageView];
}
yazh
quelle
4

Für schnelle 3 Zwecke

theImageView.image = theImageView.image!.withRenderingMode(.alwaysTemplate) theImageView.tintColor = UIColor.red

DairySeeker
quelle
2

Zum Abtönen des Bildes eines UIButton

let image1 = "ic_shopping_cart_empty"
btn_Basket.setImage(UIImage(named: image1)?.withRenderingMode(.alwaysTemplate), for: .normal)
btn_Basket.setImage(UIImage(named: image1)?.withRenderingMode(.alwaysTemplate), for: .selected)
btn_Basket.imageView?.tintColor = UIColor(UIColor.Red)
Firas Shrourou
quelle
2

iOS

Lösung dafür in Interface Builder, setzen Sie den Parameter templateImage in keyPath und wählen Sie Ihre Farbtonfarbe aus IB

extension UIImageView {

// make template image with tint color
var templateImage: Bool {
    set {
        if newValue, let image = self.image {
            let newImage = image.withRenderingMode(.alwaysTemplate)
            self.image = newImage
        }
    } get {
        return false
    }
}

}}

Hakob
quelle
2

Mit iOS 13 und höher können Sie einfach verwenden

let image = UIImage(named: "Heart")?.withRenderingMode(.alwaysTemplate)
if #available(iOS 13.0, *) {
   imageView.image = image?.withTintColor(UIColor.white)
}
KingofBliss
quelle
1

Nutzen Sie die Erweiterung in Swift: -

extension UIImageView {
    func changeImageColor( color:UIColor) -> UIImage
    {
        image = image!.withRenderingMode(.alwaysTemplate)
        tintColor = color
        return image!
    }
}

   //Change color of logo 
   logoImage.image =  logoImage.changeImageColor(color: .red)

Geben Sie hier die Bildbeschreibung ein

Shrawan
quelle
1

Swift 3 Version der Erweiterung Antwort von Fuzz

func imageWithColor(color: UIColor) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
    color.setFill()

    let context = UIGraphicsGetCurrentContext()! as CGContext
    context.translateBy(x: 0, y: self.size.height)
    context.scaleBy(x: 1.0, y: -1.0);
    context.setBlendMode(.normal)

    let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height) as CGRect
    context.clip(to: rect, mask: self.cgImage!)
    context.fill(rect)

    let newImage = UIGraphicsGetImageFromCurrentImageContext()! as UIImage
    UIGraphicsEndImageContext()

    return newImage
}
Bawpotter
quelle
0

Jetzt benutze ich diese Methode basierend auf Duncan Babbage Antwort:

+ (UIImageView *) tintImageView: (UIImageView *)imageView withColor: (UIColor*) color{
    imageView.image = [imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
    [imageView setTintColor:color];
    return imageView;
}
Josep Escobar
quelle
0

Sie können dies in Swift 3 verwenden, wenn Sie ein Bild haben, um die Schaltfläche zum Löschen zu ersetzen

func addTextfieldRightView(){

    let rightViewWidth:CGFloat = 30

    let viewMax = self.searchTxt.frame.height
    let buttonMax = self.searchTxt.frame.height - 16

    let buttonView = UIView(frame: CGRect(
        x: self.searchTxt.frame.width - rightViewWidth,
        y: 0,
        width: viewMax,
        height: viewMax))

    let myButton = UIButton(frame: CGRect(
        x: (viewMax - buttonMax) / 2,
        y: (viewMax - buttonMax) / 2,
        width: buttonMax,
        height: buttonMax))

    myButton.setImage(UIImage(named: "BlueClear")!, for: .normal)

    buttonView.addSubview(myButton)

    let clearPressed = UITapGestureRecognizer(target: self, action: #selector(SearchVC.clearPressed(sender:)))
    buttonView.isUserInteractionEnabled = true
    buttonView.addGestureRecognizer(clearPressed)

    myButton.addTarget(self, action: #selector(SearchVC.clearPressed(sender:)), for: .touchUpInside)

    self.searchTxt.rightView = buttonView
    self.searchTxt.rightViewMode = .whileEditing
}
Chester Schofield
quelle
0

Unterklasse, die auch aus Code und Interface Builder verwendet werden kann:

@implementation TintedImageView

- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self setup];
    }
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self setup];
    }
    return self;
}

-(void)setup {
    self.image = [self.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
}

@end
Łukasz Gierałtowski
quelle
0

Dies ist meine UIImage-Erweiterung und Sie können die changeTintColor-Funktion direkt für ein Bild verwenden.

extension UIImage {

    func changeTintColor(color: UIColor) -> UIImage {
        var newImage = self.withRenderingMode(.alwaysTemplate)
        UIGraphicsBeginImageContextWithOptions(self.size, false, newImage.scale)
        color.set()
        newImage.draw(in: CGRect(x: 0.0, y: 0.0, width: self.size.width, height: self.size.height))
        newImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return newImage
    }

    func changeColor(color: UIColor) -> UIImage {
        let backgroundSize = self.size
        UIGraphicsBeginImageContext(backgroundSize)
        guard let context = UIGraphicsGetCurrentContext() else {
            return self
        }
        var backgroundRect = CGRect()
        backgroundRect.size = backgroundSize
        backgroundRect.origin.x = 0
        backgroundRect.origin.y = 0

        var red: CGFloat = 0
        var green: CGFloat = 0
        var blue: CGFloat = 0
        var alpha: CGFloat = 0
        color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
        context.setFillColor(red: red, green: green, blue: blue, alpha: alpha)
        context.translateBy(x: 0, y: backgroundSize.height)
        context.scaleBy(x: 1.0, y: -1.0)
        context.clip(to: CGRect(x: 0.0, y: 0.0, width: self.size.width, height: self.size.height),
                 mask: self.cgImage!)
        context.fill(backgroundRect)

        var imageRect = CGRect()
        imageRect.size = self.size
        imageRect.origin.x = (backgroundSize.width - self.size.width) / 2
        imageRect.origin.y = (backgroundSize.height - self.size.height) / 2

        context.setBlendMode(.multiply)
        context.draw(self.cgImage!, in: imageRect)

        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage!
    }

}

Beispiel für eine Verwendung wie diese

let image = UIImage(named: "sample_image")
imageView.image = image.changeTintColor(color: UIColor.red)

Und Sie können ändern verwenden changeColorFunktion die Bildfarbe zu ändern

abdullahselek
quelle
0

profileImageView.image = theImageView.image! .withRenderingMode (.alwaysTemplate)
profileImageView.tintColor = UIColor.green

ODER

Wählen Sie zuerst ein bestimmtes Bild im Bildobjekt aus und wählen Sie dann "Rötung" als "Vorlage" anstelle von "Standard" und danach "Schreibzeile". profileImageView.tintColor = UIColor.green

Priyanka Jadhav
quelle
0

Wenn Sie eine ID für das SVG-Bild haben, können Sie die Farben in Bezug auf die ID füllen.

    let image = SVGKImage(named: "iconName")
    let svgIMGV = SVGKFastImageView(frame: self.imgView.frame)
         svgIMGV.image = image
          svgIMGV.fillTintColor(colorImage: UIColor.red, iconID: "Bank")
// Add in extension SVGKImageView
extension SVGKImageView {
 func fillTintColor(colorImage: UIColor, iconID: String) {
        if self.image != nil && self.image.caLayerTree != nil {
            print(self.image.caLayerTree.sublayers)
            guard let sublayers = self.image.caLayerTree.sublayers else { return }
            fillRecursively(sublayers: sublayers, color: colorImage, iconID: iconID)
        }
    }

     private func fillRecursively(sublayers: [CALayer], color: UIColor, iconID: String, hasFoundLayer: Bool) {
        var isLayerFound = false
        for layer in sublayers {
            if let l = layer as? CAShapeLayer {

                print(l.name)                
                //IF you want to color the specific shapelayer by id else remove the l.name  == "myID"  validation
                if let name =  l.name,  hasFoundLayer == true && name == "myID" {
                    self.colorThatImageWIthColor(color: color, layer: l)
                    print("Colouring FInished")
                }
            } else {
                if layer.name == iconID {
                    if let innerSublayer = layer.sublayers as? [CAShapeLayer] {
                        fillRecursively(sublayers: innerSublayer, color: color, iconID: iconID, hasFoundLayer: true )
                        print("FOund")
                    }
                } else {
                    if let l = layer as? CALayer, let sub = l.sublayers {
                        fillRecursively(sublayers: sub, color: color, iconID: iconID, hasFoundLayer: false)
                    }
                }
            }

        }
    }

    func colorThatImageWIthColor(color: UIColor, layer: CAShapeLayer) {
        if layer.strokeColor != nil {
            layer.strokeColor = color.cgColor
        }
        if layer.fillColor != nil {
            layer.fillColor = color.cgColor
        }
    }

}

ODER Kasse dieses Beispiel.

https://github.com/ravisfortune/SVGDEMO

K Ravi Kumar
quelle
0
let navHeight = self.navigationController?.navigationBar.frame.height;
let menuBtn = UIButton(type: .custom)
menuBtn.frame = CGRect(x: 0, y: 0, width: 45, height: navHeight!)     
menuBtn.setImage(UIImage(named:"image_name")!.withRenderingMode(.alwaysTemplate), for: .normal)        
menuBtn.tintColor = .black
Delabahan
quelle