Develop/Swift

KingFisher에서 SVG 이미지 다운로드하는 방법

hsleedevelop 2022. 11. 13. 13:31
반응형

Feat

  1. 킹피셔를 이용한 이미지 다운로드 함수 작성
  2. URL 경로의 마지막 확장자에 SVG가 있을 경우 SVG를 다운로드 하는 함수
  3. SVGKit 설치 - https://github.com/SVGKit/SVGKit
  4. SVGProcessor 작성
import SVGKit
import Kingfisher

extension UIImageView {
    func kfSetImage(with urlString: String?) {
        if urlString?.hasSuffix(".svg") == true {
            return self.kfSetSVGImage(with: urlString)
        }
        if let imageUrl = urlString.map({ App.config.WebResourceURL + $0 })?.url {
            self.kf.setImage(with: imageUrl)
        }
    }
    
    func kfSetSVGImage(with imageURLString: String?) {
        if let imageUrl = imageURLString.map({ App.config.WebResourceURL + $0 })?.url {
            self.kf.setImage(with: imageUrl, options: [.processor(SVGImgProcessor())])
        }
    }
}

///참고 소스 - https://github.com/onevcat/Kingfisher/issues/1225#issuecomment-692534266
struct SVGImgProcessor: ImageProcessor {
    var identifier: String = "com.ent-bc.yogig.SVGImgProcessor"
    func process(item: ImageProcessItem, options: KingfisherParsedOptionsInfo) -> KFCrossPlatformImage? {
        switch item {
        case .image(let image):
            //print("already an image")
            return image
        case .data(let data):
            let imsvg = SVGKImage(data: data)
            return imsvg?.uiImage
        }
    }
}

//usage
imageView?.kfSetImage(with: urlString)
반응형