이번 글에서는 이미지 관련 오픈소스 라이브러리인 Kingfisher에 대해 알아볼게요
Kingfisher는 iOS에서 원격 이미지를 쉽게 다루게 해주는 오픈소스 라이브러리로 핵심은 3가지예요
SwiftUI에서는 KFImage로 바로 쓸 수 있어서 화면 코드가 꽤 간결해집니다
다음은 kingfisher의 기능별 사용 방법입니다
KFImage(url)
.placeholder { ProgressView() }
KFImage(url)
.onFailure { error in
print(error)
}
실패했을 때 이미지는 바로 보여주지 못해서 콜백함수에서 상태를 관리해 보여줘야합니다.
struct ExampleView: some View {
@State var isLoadFailed: Bool = false
var body: some View {
if loadFailed {
VStack {
Image("fallback")
.resizable()
.scaledToFill()
}
} else {
KFImage.url(URL(string: imageURL))
.onFailure { _ in
loadFailed = true
}
.placeholder {
ProgressView()
}
.resizable()
.scaledToFill()
}
}
}
}
KFImage(url)
.onSuccess { result in
print(result.cacheType)
}
KFImage(url)
.retry(maxCount: 2, interval: .seconds(1))
KFImage(url)
.setProcessor(DownsamplingImageProcessor(size: CGSize(width: 300, height: 300)))
.scaleFactor(UIScreen.main.scale)
KFImage(url)
.setProcessor(
ResizingImageProcessor(referenceSize: CGSize(width: 300, height: 300))
|> RoundCornerImageProcessor(cornerRadius: 16)
)
KFImage(url)
.cacheOriginalImage()
KFImage(url)
.diskCacheExpiration(.days(7))
.memoryCacheExpiration(.seconds(300))
KFImage(url)
.cancelOnDisappear(true)
KFImage(url)
.forceRefresh(true)
KFImage(url)
.fade(duration: 0.2)
KFImage(url)
.requestModifier(AnyModifier { request in
var r = request
r.timeoutInterval = 10
return r
})
KFImage(url)
.requestModifier(AnyModifier { request in
var r = request
r.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
return r
})
KFImage(url)
.cacheMemoryOnly()
.cacheOriginalImage()
KFImage(url)
.cacheMemoryOnly()
KFImage(url)
.loadDiskFileSynchronously()
.backgroundDecode()
KFImage(url)
.resizable()
.scaledToFill()
.clipped()
let urls: [URL] = [
URL(string: "https://example.com/1.jpg")!,
URL(string: "https://example.com/2.jpg")!
]
let prefetcher = ImagePrefetcher(urls: urls)
prefetcher.start()
ImageCache.default.clearMemoryCache()
ImageCache.default.clearDiskCache()