首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用SvgKit在iOS中改变SVG颜色

用SvgKit在iOS中改变SVG颜色
EN

Stack Overflow用户
提问于 2019-12-28 08:27:04
回答 1查看 2.9K关注 0票数 3

我使用SVGKit库将svg呈现到图像视图中。Svg渲染完美,但问题是我无法填充SVG的颜色。我发现目标C中很少有对我没有帮助的例子。这里我使用的是Swift5。请找到附加的控制器代码。提前谢谢。

代码:

代码语言:javascript
复制
let namSvgImgVar: SVGKImage = SVGKImage(named: "camera")
let namImjVar: UIImage = namSvgImgVar.uiImage
imageView.image = namImjVar
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-28 09:29:03

我已经为相同的内容创建了一个扩展:

代码语言:javascript
复制
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,或者如果有多个图层,则可以根据您的需要对其进行修改。我就是这样用它的:

代码语言:javascript
复制
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
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59509276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档