আমি কীভাবে আইওএস এবং ওয়াচকিটে চিত্রের রঙিন রঙ পরিবর্তন করতে পারি


395

আমার নীচে বাম কালো হৃদয়ের মতো এক রঙে (স্বচ্ছ পটভূমি) ইউআইআইমেজ সহ "দ্য আইজামভিউ" নামে একটি ইউআইআইমেজভিউ রয়েছে। আইওএস 7+ ন্যাভিগেশন বার আইকনগুলিতে ব্যবহৃত রঙিন পদ্ধতি অনুসারে আমি কীভাবে এই চিত্রটির টিন্ট রঙটি iOS 7 বা ততোধিক সংস্করণে পরিবর্তন করতে পারি?

এই পদ্ধতিটি কোনও অ্যাপল ওয়াচ অ্যাপ্লিকেশনটির জন্য ওয়াচকিটেও কাজ করতে পারে?

এখানে চিত্র বর্ণনা লিখুন


4
আপনি কি বোঝাতে চেয়েছেন "নিম্নলিখিত কোডটি ভুল", একটি সেটিং UIImageসঙ্গে UIImageRenderingModeAlwaysTemplateএবং তারপর সেটিং UIImageVIewএর tintColorনেই হবে। (আমার কোডে ^^)
Vinzzz


4
আপনার উত্তরটি উত্তর বিভাগে সত্যই সরানো উচিত, কারণ আমি মনে করি এটি সেরা এবং আধুনিক।
রিচার্ড ভেনেবল

আমি যদি এই প্রশ্নটি দ্বিগুণ করতে পারতাম !!
জ্যাকোবো কেনিগ

উত্তর:


763

আইওএস
কোনও আইওএস অ্যাপের জন্য, সুইফ্ট 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. আপনাকে অবশ্যই আপনার ওয়াচকিট অ্যাপের একটি সম্পদ ক্যাটালগের সাথে আপনার চিত্র যুক্ত করতে হবে এবং বৈশিষ্ট্যটি পরিদর্শকটিতে চিত্রটি একটি টেম্পলেট চিত্র হিসাবে রেন্ডার করতে হবে। একটি আইফোন অ্যাপ্লিকেশানের মতো নয়, আপনি বর্তমানে ওয়াচকিট এক্সটেনশনে কোডটিতে টেমপ্লেট রেন্ডারিং সেট করতে পারবেন না।
  2. আপনার অ্যাপ্লিকেশনটির জন্য ইন্টারফেস বিল্ডারে আপনার ছবিটি আপনার ডব্লু কেআইন্টারফেসআইমেজে ব্যবহার করতে সেট করুন
  3. আপনার ডাব্লু কেআইন্টারফেসকন্ট্রোলারে ডব্লু কেআইন্টারফেসআইমেজ এর জন্য 'দ্য ইমেজ' নামে একটি আইবিআউটলেট তৈরি করুন ...

তারপরে রঙিন রঙটি সুইফ্ট 3 বা 4 এ সেট করতে:

theImage.setTintColor(UIColor.red)

সুইফট 2:

theImage.setTintColor(UIColor.redColor())

এর পরে টিন্ট রঙটি উদ্দেশ্য-সি তে সেট করতে:

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

আপনি যদি কোনও টেম্পলেট চিত্র ব্যবহার করেন এবং কোনও রঙিন রঙ প্রয়োগ না করেন তবে আপনার ওয়াচকিট অ্যাপ্লিকেশনটির জন্য গ্লোবাল টিন্ট প্রয়োগ করা হবে। আপনি যদি কোনও গ্লোবাল টিন্ট সেট না করে থাকেন, theImageকোনও টেম্পলেট চিত্র হিসাবে ব্যবহার করার সময় ডিফল্টরূপে হালকা নীল রঙে রঙিন করা হবে।


2
এটি সেরা এবং সহজ সমাধান।
অঙ্কিশ জৈন

4
চিত্রউইথরেন্ডারিংমড খুব ধীর। স্টোরিবোর্ড এবং চিত্রের সম্পদগুলিতে। আপনি এই দুটিও পরিবর্তন করতে পারেন: টেমপ্লেট চিত্রটিতে রেন্ডার মোড আপডেট করুন - এটি আরও ভাল সমাধানের জন্য
কেটারিনা

নিখুঁত, এখন আমি আপনার কোডের ভিত্তিতে এই পদ্ধতিটি ব্যবহার করছি: + (UIImageView ) tintImageView: (UIImageView *) রঙের সাথে চিত্র: (UIColor ) রঙ {চিত্রভিউ.আইমেজ = [চিত্রভিউ.ইমেজ চিত্রউইথেন্ডেন্ডারিং মোড: UIImageRenderingModeAlwaysTemplate]; [চিত্রভিউ সেটটিন্ট কালার: রঙ]; চিত্রটি দেখুন; }
জোসেপ এসকোবার

ইমেজ কালো সঙ্গে এটি ভাল?
ব্রুনো

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 দেওয়া উচিত ..
চিউই

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()পদ্ধতিটি প্রথম লাইনের ডানদিকে না সরানো পর্যন্ত এফওয়াইআই এটি আমার পক্ষে কাজ করে না UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
অ্যারন

@ অ্যারন আপনার মন্তব্যের ভিত্তিতে আপডেট হয়েছে Updated ধন্যবাদ।
ফুলভিও

7
ব্যবহার @CeceXX CGBlendMode.Normalপরিবর্তে
Adolfo

2
আপনি দুর্দান্ত, তবে আপনাকে এটি পরিবর্তন করতে হবে সুইফট 3
সিম্পুমাইন্ড

1
@ সিম্পিমাইন্ডের পরিবর্তে সুইফট 4 সরবরাহ করা হয়েছে।
ফুলভিও

97

স্টোরিবোর্ড এবং চিত্রের সম্পদগুলিতে। আপনি এই দুটি পরিবর্তন করতে পারেন:

টেমপ্লেট চিত্রটিতে রেন্ডার মোড আপডেট করুন

চিত্র সম্পদগুলিতে টেমপ্লেট চিত্রটিতে রেন্ডার মোড আপডেট করুন

দর্শনে রঙিন রঙ আপডেট করুন।

দর্শন দর্শনগুলিতে রঙিন রঙ আপডেট করুন


22
এটি সবচেয়ে গুরুত্ব সহকারে সবচেয়ে খারাপ উত্তর!
ব্র্যান্ডস্ক্রিপ্ট

1
স্টোরিবোর্ড থেকে এই মানটি সেট করা আমার পক্ষে কখনই কাজ করে না। আমাকে সর্বদা imageView.tintColorকোড থেকে ব্যবহার করতে হবে ।
কামিল পোভাউভস্কি

3
@ কামিলপোয়াউস্কি আমার জন্য এটি কখনও কখনও কাজ করে ... আমি কেন জানি না। আমি আশা করি আমি জানতাম কেন এটি সর্বদা কাজ করে না। সুতরাং আমি কোড দ্বারা এটি শেষ
যীশু রদ্রিগেজ

2
আমার জন্য, এই স্টোরিবোর্ড পদ্ধতিটি বোতামগুলিতে কাজ করে তবে চিত্র ভিউগুলিতে নয়। আমাকে এখনও চিত্র ভিউয়ের জন্য কোডে টিন্টকলার সেট করতে হবে।
ডেরেক সোইক

2
আইবিতে কেন কাজ করছে না এমন ভেবে কেউ যদি এখনও তাদের মাথা আঁচড়ান তবে চিত্রটি দেখার জন্য ওপাকটিকে নংয়ে সেট করার চেষ্টা করুন
বনান

40

সুইফট 4

ইউআইআইমেজ এসভিজি / পিডিএফ এর রঙিন পরিবর্তন করুন যা অনন্য রঙের সাথে চিত্রের জন্য কাজ করে :

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

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

ইউআইআইমেজভিউয়ের রঙিন পরিবর্তন করুন , যা অনন্য রঙের চিত্রের জন্য কাজ করে :

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

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

ছবির জন্য ইউআইআইমেজের রঙ পরিবর্তন করুন , এটি ব্যবহার করুন:

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

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
আরে, আমি দ্রুত গতিতে এসেছি, তবে আপনি এখানে বলেছেন যে এটি এসভিজি চিত্রগুলির জন্য, তবে আমি এসআইজি-কে ইউআইআইমেজ-তে পার্স করার কোনও উপায় খুঁজে পাচ্ছি না, আপনি কি আমাকে সাহায্য করতে পারবেন? অথবা হতে পারে কোনওভাবে আমি এসভিজির সাথে এটি সঠিকভাবে পরিচালনা করতে পারি। ধন্যবাদ!
দুমিত্রু রোগোজিনারু

@ দুমিত্ররুগোজিনারু সম্পদে টেমপ্লেট ইমেজ সহ এসভিজি ফন্ট ব্যবহার করুন
ইয়ানস্টেফ

"ফানক মডিফায়েড ইমেজ" এর অনুবাদ এবং স্কেল কেন করা দরকার?
লুকা দাভানজো


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

বাহ, এক ঘন্টার জন্য এটি অনুসন্ধান করার পরে যাদু এর মতো কাজ করে। এর জন্য প্রয়োজন: একটি এনএসএসেক্সট এটাকমেন্টে আইকনের মূলটির থেকে আলাদা রঙে একটি আইকন সেট করা। কোনও ইউআইআইজেভিউ ভিউ ব্যবহার করার এবং এর রঙিন রঙ পরিবর্তন করার স্ট্যান্ডার্ড উত্তরটি এখানে কাজ করে না, কারণ এনএসটিেক্সট আটকটি ইউআইআইমেজভিউ নেয় না।
মার্কো

1
এটি আমি এখনও অবধি সবচেয়ে ভাল সমাধানটি খুঁজে পেয়েছি বিশেষত যে কেউ কোড খুঁজছেন যা সুইফট ৩ এর সাথে কাজ করে Great দুর্দান্ত পরামর্শ!
শাশওয়াত

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
রুই পেরেস

হ্যাঁ, এটি কোডটি সংক্ষিপ্ত করে না তবে মনে হয় এটি কোডের স্বচ্ছতা হ্রাস করতে পারে। এজন্য ডট শর্টকাট সম্পর্কে নিশ্চিত নয়
এসকরোথ

আমি আপনার পিওভি দেখতে পাচ্ছি, কেবল একটি বিকল্প।
রুই পেরেস

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

আইওএস

ইন্টারফেস বিল্ডার থেকে এটি করার সমাধান, কীপ্যাথে টেমপ্লেট চিত্র ইমেজ সেট করুন এবং আইবি থেকে আপনার রঙিন রঙ চয়ন করুন

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

আইওএস ১৩ এবং তদূর্ধ্বের সাহায্যে আপনি সহজেই ব্যবহার করতে পারেন

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

এটি আমার ইউআইআইমেজ এক্সটেনশন এবং আপনি সরাসরি কোনও চিত্রের জন্য চেঞ্জটিন্টকালার ফাংশন ব্যবহার করতে পারেন।

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 = theImageView.image! .withRenderingMode (.alwaysTemplate)
profileImageView.tintColor = UIColor.green

অথবা

প্রথমে চিত্রের সম্পদে বিশেষ চিত্র নির্বাচন করুন এবং তারপরে ডিফল্টের পরিবর্তে টেমপ্লেট হিসাবে reddened নির্বাচন করুন এবং তারপরে লেখার লাইনের পরে। প্রোফাইল আইমেজভিউ.টিন্ট কালার = ইউআইকিওলোর অ্যাড্রিন


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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.