मैं आईओएस और वॉचकीट में इमेज टिंटकलर कैसे बदल सकता हूं


395

मेरे पास एक UIImageView है, जिसे "theImageView" कहा जाता है, UIImage के साथ एक ही रंग (पारदर्शी पृष्ठभूमि) में नीचे बाएं काले दिल की तरह है। मैं iOS 7+ नेविगेशन बार आइकन में उपयोग किए गए टिंट विधि के अनुसार, इस छवि के रंग को आईओएस 7 या इसके बाद के संस्करण में कैसे बदल सकता हूं?

क्या यह विधि Apple Watch ऐप के लिए वॉचकीट में भी काम कर सकती है?

यहां छवि विवरण दर्ज करें


4
आपका क्या मतलब है "निम्नलिखित कोड गलत है", एक की स्थापना UIImageके साथ UIImageRenderingModeAlwaysTemplateऔर उसके बाद की स्थापना UIImageVIewकी tintColorहै काम करते हैं। (मेरे कोड ^ ^ में)
विनज़ेज़


4
आपको वास्तव में अपने उत्तर को उत्तर अनुभाग में ले जाना चाहिए, क्योंकि मुझे लगता है कि यह सबसे अच्छा और सबसे आधुनिक है।
रिचर्ड वेनटेबल

काश मैं इस सवाल को दोगुना कर पाता !!
कोएनिग

जवाबों:


763

iOS के
लिए iOS ऐप, स्विफ्ट 3, 4 या 5 में:

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

स्विफ्ट 2 के लिए:

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

इस बीच, आधुनिक उद्देश्य-सी समाधान है:

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

वॉचकिट
ऐप्पल वॉच ऐप्स के लिए वॉचकीट में, आप एक टेंप्लेट छवि के लिए टिंट रंग सेट कर सकते हैं ।

  1. आपको अपने WatchKit App में अपनी छवि को एक एसेट कैटलॉग में जोड़ना होगा, और उस छवि को सेट करना होगा जो Attributes Inspector में टेम्पलेट इमेज के रूप में प्रदान की जाएगी। IPhone ऐप के विपरीत, आप वर्तमान में WatchKit एक्सटेंशन में कोड में टेम्पलेट रेंडरिंग सेट नहीं कर सकते।
  2. उस छवि को अपने ऐप के लिए WKInterfaceImage में इंटरफ़ेस बिल्डर में उपयोग करने के लिए सेट करें
  3. WIInterfaceImage के लिए अपने WKInterfaceController में एक IBOutlet बनाएं जिसे 'TheImage' कहा जाता है ...

तब स्विफ्ट 3 या 4 में टिंट रंग सेट करने के लिए:

theImage.setTintColor(UIColor.red)

स्विफ्ट 2:

theImage.setTintColor(UIColor.redColor())

तब उद्देश्य-सी में टिंट रंग सेट करने के लिए:

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

यदि आप एक टेम्पलेट छवि का उपयोग करते हैं और एक टिंट रंग लागू नहीं करते हैं, तो आपके WatchKit ऐप के लिए ग्लोबल टिंट लागू किया जाएगा। यदि आपने ग्लोबल टिंट सेट नहीं किया है, theImageतो टेम्प्लेट छवि के रूप में उपयोग किए जाने पर डिफ़ॉल्ट रूप से हल्का नीला रंग जाएगा।


2
यह सबसे अच्छा और सरल उपाय है।
अंकित जैन

4
imageWithRenderingMode बहुत धीमा है। स्टोरीबोर्ड और इमेज एसेट्स में। आप इस दो को भी बदल सकते हैं: टेम्प्लेट इमेज में रेंडर मोड को अपडेट करें - एक बेहतर समाधान है
कैटरीना

बिल्कुल सही, अब मैं अपने कोड में आधारित इस विधि का उपयोग करता हूं: + (UIImageView ) tintImageView: (UIImageView *) imageView withColor: (UIColor ) रंग {imageView.image = [imageView .image imageWithRenderingMode: UIImageRenderingModeAlwaysTemplate; [imageView setTintColor: color]; वापसी छवि दृश्य; }
जोसेफ एस्कोबार

क्या यह काले रंग के साथ बेहतर है?
ब्रूनो

1
@ ब्रूनो छवि को काला होने की आवश्यकता नहीं है, नहीं। किसी भी रंग के साथ काम करता है।
डंकन बैबेज

121

यहां एक श्रेणी दी गई है जो कि चाल करना चाहिए

@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

तो आप ऐसा करेंगे:

theImageView.image = [theImageView.image imageWithColor:[UIColor redColor]];

इस बहुत ही मान्य उत्तर के लिए धन्यवाद, मुझे लगता है कि मेरा कोड शुरू से ही ठीक था, मुझे अपने स्वयं के प्रश्न का उत्तर देना चाहिए और आपको एक +1 देना चाहिए ..
chewy

104

मैं एक स्विफ्ट का उपयोग कर में यह करना था extension

मैंने सोचा कि मैं इसे कैसे साझा करूँगा:

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
    }
}

उपयोग:

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

स्विफ्ट 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!
    }
}

उपयोग:

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


1
जब तक मैं color1.setFill()विधि में पहली पंक्ति के ठीक नीचे नहीं चला जाता, तब तक FYI करना मेरे लिए काम नहीं करता था UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
आरोन

@Aaron अपडेट आपकी टिप्पणी के आधार पर। धन्यवाद।
फुलवियो

7
@ CeceXX CGBlendMode.Normalइसके बजाय का उपयोग करें
Adolfo

2
आप बहुत बढ़िया हैं, हालाँकि आपको इसे स्विफ्ट 3 में बदलने की आवश्यकता हो सकती है
SimpuMind

1
@SimpiMind ने इसके बजाय स्विफ्ट 4 प्रदान की।
फुलवियो

97

स्टोरीबोर्ड और इमेज एसेट्स में। आप इस दो को भी बदल सकते हैं:

टेम्पलेट इमेज में रेंडर मोड को अपडेट करें

इमेज एसेट्स में टेम्पलेट इमेज में रेंडर मोड को अपडेट करें

दृश्य में रंग का अद्यतन करें।

दृश्य में दृश्य में रंग रंग अद्यतन करें


22
यह गंभीरता से सबसे बदमाश जवाब है!
ब्रांडन्सस्क्रिप्ट

1
स्टोरीबोर्ड से यह मान सेट करना मेरे लिए कभी काम नहीं करता है। मुझे हमेशा imageView.tintColorकोड से उपयोग करना होगा ।
कामिल पोव्लोव्स्की

3
@ मेरे लिए KamilPowałowski यह कभी-कभी काम करता है ... मुझे यकीन नहीं है कि क्यों। काश मुझे पता होता कि यह हमेशा काम क्यों नहीं करता। इसलिए मैं इसे कोड द्वारा समाप्त कर रहा हूं
यीशु रॉड्रिग्ज

2
मेरे लिए, यह स्टोरीबोर्ड विधि बटन पर काम करती है, लेकिन imageViews नहीं। मुझे अभी भी imageViews के लिए कोड में tintColor सेट करना है।
डेरेक सोइक

2
मामले में किसी को अभी भी अपने सिर खरोंच है सोच क्यों यह आईबी में काम नहीं कर रहा, नहीं करने के लिए imageView के अपारदर्शी सेट करने का प्रयास
Bonan

40

स्विफ्ट 4

UIImage SVG / PDF का टिंट बदलें , जो अद्वितीय रंग के साथ छवि के लिए काम करता है :

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें

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
    }
}

UIImageView का टिंट बदलें , जो अद्वितीय रंग के साथ छवि के लिए काम करता है :

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें

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

चित्र के लिए UIImage का टिंट बदलें , इसका उपयोग करें:

यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें

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!
    }
}

1
हे, मैं स्विफ्ट में नया हूं, लेकिन आपने यहां बताया कि यह एसवीजी छवियों के लिए है, लेकिन मुझे एसवीजी को यूआईआईएमजेज के लिए पार्स करने का तरीका नहीं मिल रहा है, क्या आप मेरी मदद कर सकते हैं? या शायद किसी तरह मैं इसे एसवीजी के साथ ठीक से संभाल सकता हूं। धन्यवाद!
डुमित्रु रोजोजिनारू

@DumitruRogojinaru संपत्ति में टेम्पलेट छवि के साथ एसवीजी का उपयोग करें
YannSteph

"फंकस मॉडिफाईम" पर अनुवाद और पैमाना क्यों आवश्यक है?
लुका दावानजो

स्विफ्ट 4 के लिए अपडेट
YannSteph

36

अगर किसी को बिना किसी समाधान की परवाह है 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
    }
}

वाह, एक घंटे के लिए इसे खोजने के बाद जादू की तरह काम करता है +। इसके लिए आवश्यक है: आइकन के मूल एक से अलग रंग में एक NSTextAttachment में एक आइकन सेट करना। UIImageView का उपयोग करने और अपने टिंटकलर को बदलने का मानक उत्तर यहां काम नहीं करता है, क्योंकि NSTextAttachment UIImageView नहीं लेता है।
मार्को

1
यह सबसे अच्छा समाधान है जो मैंने अब तक विशेष रूप से किसी के लिए कोड की तलाश में पाया है जो स्विफ्ट के साथ काम करता है 3. महान सुझाव!
शाश्वत

17

स्विफ्ट के साथ

let commentImageView = UIImageView(frame: CGRectMake(100, 100, 100, 100))
commentImageView.image = UIImage(named: "myimage.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
commentImageView.tintColor = UIColor.blackColor()
addSubview(commentImageView)

3
आप बस डाल सकते हैं .AlwaysTemplate
रुई पेर

हाँ, यह कोड को छोटा करता है, लेकिन ऐसा लगता है कि यह कोड की स्पष्टता को कम कर सकता है। उस वजह से डॉट शॉर्टकट के बारे में निश्चित नहीं है
एस्कार्रॉथ

मुझे आपका POV दिख रहा है, बस एक विकल्प।
रुई पेर

4

इसे इस्तेमाल करे

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

या

- (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];
}

4

तेजी से 3 उद्देश्यों के लिए

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


2

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)

2

आईओएस

इंटरफ़ेस बिल्डर से करने के लिए समाधान, keyPath में templateImage param सेट करें और 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
    }
}

}


2

IOS 13 और इसके बाद के संस्करण, आप बस उपयोग कर सकते हैं

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

1

स्विफ्ट में एक्सटेंशन का लाभ लें: -

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)

यहां छवि विवरण दर्ज करें


1

फ़ज़ से विस्तार के उत्तर का स्विफ्ट 3 संस्करण

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
}

0

अब मैं डंकन बैबेज प्रतिक्रिया के आधार पर इस विधि का उपयोग करता हूं:

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

0

आप स्विफ्ट 3 में इसका उपयोग कर सकते हैं यदि आपके पास स्पष्ट बटन को बदलने के लिए एक छवि है

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
}

0

उपवर्ग जो कोड और इंटरफ़ेस बिल्डर से भी उपयोग किया जा सकता है:

@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

0

यह मेरा UIImage एक्सटेंशन है और आप सीधे किसी इमेज के लिए changeTintColor फ़ंक्शन का उपयोग कर सकते हैं।

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!
    }

}

उदाहरण इस तरह का उपयोग

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

और आप changeColorछवि रंग को बदलने के लिए परिवर्तन फ़ंक्शन का उपयोग कर सकते हैं


0

profileImageView.image =ImageView.image! .withRenderingMode (-alwaysTememplate)
प्रोफ़ाइलImageView.tintColor = UIColor.green

या

पहले छवि संपत्ति में विशेष रूप से छवि का चयन करें और फिर डिफ़ॉल्ट के बजाय टेम्पलेट के रूप में reddened का चयन करें और उसके बाद पंक्ति लिखें। profileImageView.tintColor = UIColor.green


0

यदि आपके पास एसवीजी छवि के लिए कोई आईडी है, तो आप आईडी के संबंध में रंग भर सकते हैं।

    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
        }
    }

}

या इस उदाहरण की जाँच करें।

https://github.com/ravisfortune/SVGDEMO


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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.