ios - 在 iOS Swift 中使用 SvgKit 更改 SVG 颜色

标签 ios swift svgkit

我正在使用 SVGKit 库将 svg 渲染到 ImageView 中。 Svg 渲染完美,但问题是我无法填充 SVG 颜色。我在 Objective C 中发现了一些对我没有帮助的例子。这里我使用的是 Swift5。请找到随附的 Controller 代码。提前致谢。

代码:

let namSvgImgVar: SVGKImage = SVGKImage(named: "camera")
let namImjVar: UIImage = namSvgImgVar.uiImage
imageView.image = namImjVar

最佳答案

我已经为它创建了一个扩展:

extension SVGKImage {

    // MARK:- Private Method(s)
    private func fillColorForSubLayer(layer: CALayer, color: UIColor, opacity: Float) {
        if layer is CAShapeLayer {
            let shapeLayer = layer as! CAShapeLayer
            shapeLayer.fillColor = color.cgColor
            shapeLayer.opacity = opacity
        }

        if let sublayers = layer.sublayers {
            for subLayer in sublayers {
                fillColorForSubLayer(layer: subLayer, color: color, opacity: opacity)
            }
        }
    }

    private func fillColorForOutter(layer: CALayer, color: UIColor, opacity: Float) {
        if let shapeLayer = layer.sublayers?.first as? CAShapeLayer {
            shapeLayer.fillColor = color.cgColor
            shapeLayer.opacity = opacity
        }
    }

    // MARK:- Public Method(s)
    func fillColor(color: UIColor, opacity: Float) {
        if let layer = caLayerTree {
            fillColorForSubLayer(layer: layer, color: color, opacity: opacity)
        }
    }

    func fillOutterLayerColor(color: UIColor, opacity: Float) {
        if let layer = caLayerTree {
            fillColorForOutter(layer: layer, color: color, opacity: opacity)
        }
    }
}

如果您的 SVG 图像只有一层颜色使用 fillColor,或者 fillOutterLayerColor 如果有多个,您可以根据你的需要。这是我使用它的方式:

static func getImage(imageName: String, fontSize size: CGSize, fillColor color: UIColor?, opacity: Float = 1.0) -> UIImage? {
    let svgImage: SVGKImage = SVGKImage(named: imageName)
    svgImage.size = size
    if let colorToFill = color {
       svgImage.fillColor(color: colorToFill, opacity: opacity)
    }

   return svgImage.uiImage
}

关于ios - 在 iOS Swift 中使用 SvgKit 更改 SVG 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59509276/

相关文章:

iphone - 如何检测 UITableView 的拖动结束事件?

ios - 接受类型序列的函数

swift - 如何停止屏幕上的节点被触摸? SpriteKit

swift - 如何在 swift 中保存和检索 svg 图像。

ios - 在启用 ARC 的项目中导入非 ARC 代码编译的 .a 文件

ios - 系统媒体播放器进度作为 UISlider

swift - 如何在 Swift 中增加字符串

ios - iPhone模拟器播放视频,真实设备不会

iphone - 什么是适用于 iOS 的具有 bool 运算的优秀 3D 库