Làm cách nào để thay đổi hình ảnh tintColor trong iOS và WatchKit


395

Tôi có một UIImageView được gọi là "theImageView", với UIImage có một màu duy nhất (nền trong suốt) giống như trái tim đen bên trái. Làm cách nào tôi có thể thay đổi màu sắc của hình ảnh này theo chương trình trong iOS 7 trở lên, theo phương pháp màu được sử dụng trong các biểu tượng Thanh điều hướng iOS 7+?

Phương pháp này cũng có thể hoạt động trong WatchKit cho ứng dụng Apple Watch không?

nhập mô tả hình ảnh ở đây


4
Ý anh là gì "đoạn mã sau là sai", thiết lập một UIImagevới UIImageRenderingModeAlwaysTemplatevà sau đó thiết lập UIImageVIew's tintColorlàm việc không. (trong mã của tôi ^^)
Vinzzz

2
Sử dụng png với độ trong suốt như thế này
Alladinian

4
Bạn thực sự nên chuyển câu trả lời của bạn đến phần câu trả lời, vì tôi nghĩ đó là câu trả lời hay nhất và hiện đại nhất.
Richard Venable

Tôi ước tôi có thể tăng gấp đôi câu hỏi này !!
Jacobo Koenig

Câu trả lời:


763

iOS
Dành cho ứng dụng iOS, trong Swift 3, 4 hoặc 5:

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

Dành cho Swift 2:

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

Trong khi đó, giải pháp Objective-C hiện đại là:

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

Watchkit
Trong ứng dụng WatchKit cho Apple Watch, bạn có thể đặt màu sắc cho hình ảnh mẫu .

  1. Bạn phải thêm hình ảnh của mình vào Danh mục tài sản trong Ứng dụng WatchKit của mình và đặt bộ hình ảnh được hiển thị dưới dạng Hình ảnh mẫu trong Trình theo dõi thuộc tính. Không giống như ứng dụng cho iPhone, hiện tại bạn không thể đặt kết xuất mẫu trong mã trong Tiện ích mở rộng WatchKit.
  2. Đặt hình ảnh đó được sử dụng trong WKInterfaceImage trong trình tạo giao diện cho ứng dụng của bạn
  3. Tạo một IBOutlet trong WKInterfaceControll của bạn cho WKInterfaceImage có tên là 'theImage' ...

Để sau đó đặt màu sắc màu trong Swift 3 hoặc 4:

theImage.setTintColor(UIColor.red)

Swift 2:

theImage.setTintColor(UIColor.redColor())

Để sau đó đặt màu sắc màu trong Objective-C:

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

Nếu bạn sử dụng hình ảnh mẫu và không áp dụng màu sắc, Global Tint cho ứng dụng WatchKit của bạn sẽ được áp dụng. Nếu bạn chưa đặt Global Tint, theImagemặc định sẽ có màu xanh nhạt khi được sử dụng làm hình ảnh mẫu.


2
đây là giải pháp tốt nhất và đơn giản
Ankish Jain

4
imageWithRenderingMode quá chậm. Trong bảng phân cảnh và tài sản hình ảnh. bạn cũng có thể thay đổi cả hai điều này: Cập nhật Chế độ kết xuất thành Hình ảnh mẫu - đó là một giải pháp tốt hơn
Katerina

Hoàn hảo, bây giờ tôi sử dụng phương thức này dựa trên mã của bạn: + (UIImageView ) tintImageView: (UIImageView *) imageView withColor: (UIColor ) color {imageView.image = [imageView.image imageWithRenderingMode: UIImageR [imageView setTintColor: color]; trả lại hình ảnh Xem; }
Josep Escobar

nó có tốt hơn với hình ảnh màu đen không?
Bruno

1
Hình ảnh @Bruno không cần phải là màu đen, không. Hoạt động với bất kỳ màu nào.
Duncan Babbage

121

Đây là một thể loại nên làm

@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

vì vậy bạn sẽ làm:

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

Cảm ơn vì câu trả lời rất hợp lệ này, tôi đoán mã của tôi đã ổn ngay từ đầu, tôi nên trả lời câu hỏi của riêng tôi và cho bạn +1 bất kể ..
nhai

104

Tôi đã phải làm điều này trong Swift bằng cách sử dụng một extension.

Tôi nghĩ tôi muốn chia sẻ cách tôi đã làm nó:

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

Sử dụng:

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

Sử dụng:

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


1
FYI điều này không làm việc cho tôi cho đến khi tôi di chuyển color1.setFill()bên phải xuống dưới dòng đầu tiên trong phương thức UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale).
Aaron

@Aaron Cập nhật dựa trên bình luận của bạn. Cảm ơn.
Fulvio

7
@CeceXX sử dụng CGBlendMode.Normalthay thế
Adolfo

2
Bạn thật tuyệt vời, tuy nhiên bạn có thể cần phải thay đổi nó thành Swift 3
SimpuMind

1
@SimpiMind Cung cấp Swift 4 thay thế.
Fulvio

97

Trong bảng phân cảnh và tài sản hình ảnh. bạn cũng có thể thay đổi hai điều này:

Cập nhật Chế độ kết xuất thành Ảnh mẫu

Cập nhật Chế độ kết xuất thành Hình ảnh mẫu trong Tài sản hình ảnh

Cập nhật màu sắc trong Lượt xem.

Cập nhật màu sắc trong Lượt xem trong Lượt xem


22
Đây thực sự là câu trả lời tồi tệ nhất!
brandonscript

1
Đặt giá trị này từ bảng phân cảnh không bao giờ làm việc cho tôi. Tôi luôn phải sử dụng imageView.tintColortừ mã.
Kamil Powałowski

3
@ KamilPowałowski đối với tôi điều này đôi khi hoạt động ... Tôi không chắc tại sao. Tôi ước tôi biết tại sao nó không luôn luôn hoạt động. Vì vậy, tôi kết thúc việc đó bằng mã
Jesus Rodriguez

2
Đối với tôi, phương pháp bảng phân cảnh này hoạt động trên các nút nhưng không phải là imageViews. Tôi vẫn phải đặt tintColor trong mã cho imageViews.
Derek Soike

2
Trong trường hợp ai đó vẫn gãi đầu tự hỏi tại sao nó không hoạt động trong IB, hãy thử đặt OpView của ImageView thành số
Bonan

40

Swift 4

Thay đổi tông màu của UIImage SVG / PDF , hoạt động cho hình ảnh với màu sắc độc đáo :

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

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

Thay đổi sắc độ của UIImageView , hoạt động cho hình ảnh với màu sắc độc đáo :

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

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

Thay đổi tông màu của UIImage cho ảnh , sử dụng:

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

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
này, tôi là người mới trong swift, nhưng bạn đã nói ở đây rằng đó là hình ảnh SVG, nhưng tôi không thể tìm cách phân tích SVG thành UIImage, bạn có thể giúp tôi không? hoặc có lẽ bằng cách nào đó tôi có thể xử lý việc này với SVG đúng cách. Cảm ơn!
Dumitru Rogojinaru

@DumitruRogojinaru sử dụng fonction SVG với hình ảnh mẫu trong tài sản
YannSteph

Tại sao cần phải dịch và chia tỷ lệ trên "func đã sửa đổi"?
Luca Davanzo

Cập nhật cho Swift 4
YannSteph

36

Nếu ai quan tâm một giải pháp mà không có 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
    }
}

Wow, hoạt động như ma thuật sau khi tìm kiếm này trong một giờ +. Cần thiết cho: Đặt biểu tượng trong NSTextAttachment có màu khác với màu gốc của biểu tượng. Câu trả lời chuẩn để sử dụng UIImageView và thay đổi tintColor của nó không hoạt động ở đây, vì NSTextAttachment không lấy UIImageView.
marco

1
Đây là giải pháp tốt nhất tôi đã tìm thấy cho đến nay, đặc biệt đối với bất kỳ ai đang tìm kiếm mã hoạt động với Swift 3. Gợi ý tuyệt vời!
shashwat

17

Với 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)

3
bạn có thể chỉ cần đặt .AlwaysTemplate.
Rui Peres

Vâng, nó rút ngắn mã, nhưng có vẻ như nó có thể làm giảm sự rõ ràng của mã. không chắc chắn về các phím tắt vì điều đó
Esqarrouth

Tôi thấy POV của bạn, chỉ là một thay thế.
Rui Peres

4

Thử cái này

http://robots. Dùtbot.com / designing-for-ios -bleinating-mode

hoặc là

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

Đối với 3 mục đích nhanh chóng

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


2

Để pha màu cho hình ảnh của một 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

iOS

Giải pháp để thực hiện điều đó từ Trình tạo giao diện, đặt tham số templateImage trong keyPath và chọn màu sắc của bạn từ 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

Với iOS 13 trở lên, bạn chỉ cần sử dụng

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

1

Tận dụng lợi ích của Tiện ích mở rộng trong 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)

nhập mô tả hình ảnh ở đây


1

Swift 3 phiên bản trả lời mở rộng từ 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
}

0

Bây giờ tôi sử dụng phương pháp này dựa trên phản ứng Duncan Babbage:

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

0

Bạn có thể sử dụng điều này trong Swift 3 nếu bạn có hình ảnh để thay thế nút xóa

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

Lớp con cũng có thể được sử dụng từ mã và Trình tạo giao diện:

@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

Đây là tiện ích mở rộng UIImage của tôi và bạn có thể trực tiếp sử dụng chức năng changeTintColor cho hình ảnh.

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

}

Ví dụ sử dụng như thế này

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

Và bạn có thể sử dụng changeColorchức năng thay đổi để thay đổi màu sắc hình ảnh


0

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

HOẶC LÀ

Đầu tiên chọn Hình ảnh cụ thể trong nội dung hình ảnh và sau đó chọn màu đỏ làm Mẫu thay vì Mặc định và sau dòng ghi đó. profileImageView.tintColor = UIColor.green


0

nếu bạn có bất kỳ id nào cho hình ảnh SVG, bạn có thể tô màu cho ID.

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

}

HOẶC Thanh toán ví dụ này.

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.