美文网首页
iOS使用SVG总结

iOS使用SVG总结

作者: 呼呼兔 | 来源:发表于2019-02-19 01:06 被阅读8次

    svg图片的size不管怎么变,都不会失真。所以有时候可以用svg代替png图片。


    显示SVG图片

    如果只是显示svg图片,有好几种方法。但是都有优缺点。


    使用webview显示

    使用UIWebViewWKWebView,关键代码如下。

    if let data = try? Data.init(contentsOf: URL.init(fileURLWithPath: tigerPath ?? "")) {
                let dataStr = String.init(data: data, encoding: .utf8) ?? ""
                wkWebView.loadHTMLString(dataStr, baseURL: nil)
                webView.loadHTMLString(dataStr, baseURL: nil)
            }
    

    使用SVGKit显示

    SVGKit是用Objective-C写的,专门处理svg的第三方框架。

    • 使用UIImageView显示
           let svgView = UIImageView(frame: .init(x: 0, y: 0, width: 100, height: 100))
            ///创建SVGKImage
            let svgImage = SVGKImage.init(named: "ICO 好妈圈@2x 2.svg")!
            svgView.image = svgImage.uiImage
            ///可以自己设置大小,有些svg没有设置size,这里需要设置下
            //        svgImage.size = .init(width: 100, height: 100)
            view.addSubview(svgView)
    
    • 使用SVGKFastImageView显示
            let svgImage = SVGKImage.init(named: "ICO 好妈圈@2x 2.svg")!
            let svgImgView = SVGKFastImageView.init(svgkImage: svgImage)!
            svgImgView.frame = .init(x: 0, y: 0, width: 100, height: 100)
            view.addSubview(svgImgView)
    

    使用SwiftSVG显示

    SwiftSVG是用Swift写的,专门处理svg的第三方框架。

    let fistBump = UIView(SVGNamed: "fistbump")     // In the main bundle
    self.addSubview(fistBump)
    

    使用Macaw显示

    Macaw是个可以显示很多样式的Swift框架。

           if let node = try? SVGParser.parse(fullPath: tigerPath ?? "") {
                let svgView = SVGView.init(node: node, frame: view.bounds)
                view.addSubview(svgView)
            }
    

    使用SVGKit的问题

    由于工程里改的图片是tabbaritem的。所以需要拿到UIImage。所以只能使用SVGKit。使用过程中也遇到一些。


    1. 颜色显示不对
      svg图片在浏览器里颜色是深灰色的, 原图
      但是使用SVGKit后显示的是黑色的,和原图不一样。 svg显示的图
      查了半天才查到问题。是css名字的问题,也是Photoshop的坑。
      <style>
          .cls-1 {
            fill: #666;
            fill-rule: evenodd;
          }
        </style>
    

    cls-1SVGKit中会解析不了。所以把样式里面的-都去掉就行了。
    由于我的svg文件都是从Photoshop中导出的,里面的样式命名全部是cls-1这样的。
    所以,如果你的svg文件是Photoshop中导出的,一定自己手动把所有的-去掉。


    1. 滤镜效果不显示
      如果svg中带有filter,那么SVGKitMacaw都不能显示滤镜效果。
      这个问题,现在我也没找到解决方法。

    三种显示方式对比

    SVGKit的功能要多一些,可以满足大部分需求。

    特点 webView SVGKit Macaw
    显示filter 可以
    加载速度
    拿到UIImage 可以

    gitHub

    相关文章

      网友评论

          本文标题:iOS使用SVG总结

          本文链接:https://www.haomeiwen.com/subject/vtutyqtx.html