Kingfisher는 웹에서 이미지를 다운로드하고 캐싱하기 위한 강력한 순수 Swift 라이브러리입니다. 다음 앱에서 원격 이미지 작업을 위해 순수 Swift 방식을 사용할 수 있는 기회를 제공합니다.
비동기 이미지 다운로드 및 캐싱.
URLSession
기반 네트워킹 또는 로컬 제공 데이터에서 이미지를 로드합니다.
유용한 이미지 프로세서와 필터가 제공됩니다.
메모리와 디스크 모두를 위한 다중 계층 하이브리드 캐시.
캐시 동작을 미세하게 제어합니다. 만료 날짜 및 크기 제한을 사용자 정의할 수 있습니다.
성능 향상을 위해 다운로드를 취소하고 이전에 다운로드한 콘텐츠를 자동으로 재사용합니다.
독립 구성 요소. 필요에 따라 다운로더, 캐싱 시스템, 이미지 프로세서를 별도로 사용하세요.
이미지를 미리 가져오고 캐시에서 표시하여 앱을 강화합니다.
URL에서 이미지를 직접 설정하기 위한 UIImageView
, NSImageView
, NSButton
, UIButton
, NSTextAttachment
, WKInterfaceImage
, TVMonogramView
및 CPListItem
용 확장입니다.
이미지 설정 시 내장된 전환 애니메이션.
이미지를 로드하는 동안 사용자 정의 가능한 자리 표시자 및 표시기.
이미지 처리 및 이미지 포맷을 쉽게 확장할 수 있습니다.
저데이터 모드 지원.
SwiftUI 지원.
Swift 6 및 Swift 동시성(엄격 모드)이 준비되었습니다.
Live Photo용 로드 및 캐시.
가장 간단한 사용 사례는 UIImageView
확장을 사용하여 이미지를 이미지 보기로 설정하는 것입니다.
import Kingfisherlet url = URL(문자열: "https://example.com/image.png")imageView.kf.setImage(with: url)
Kingfisher는 url
에서 이미지를 다운로드하여 메모리 캐시와 디스크 캐시 모두에 전송하고 imageView
에 표시합니다. 나중에 동일한 URL로 설정하면 이미지가 캐시에서 검색되어 즉시 표시됩니다.
SwiftUI를 사용하는 경우에도 작동합니다.
var body: some View {KFImage(URL(string: "https://example.com/image.png")!)}
강력한 옵션을 사용하면 Kingfisher로 어려운 작업을 간단한 방법으로 수행할 수 있습니다. 예를 들어, 아래 코드는 다음과 같습니다.
고해상도 이미지를 다운로드합니다.
이미지 보기 크기에 맞게 다운샘플링합니다.
주어진 반경으로 둥근 모서리를 만듭니다.
다운로드하는 동안 시스템 표시기와 자리 표시자 이미지를 표시합니다.
준비되면 "페이드 인" 효과를 사용하여 작은 축소판 이미지에 애니메이션을 적용합니다.
원본 대형 이미지는 나중에 사용할 수 있도록 디스크에 캐시되므로 세부 정보 보기에서 다시 다운로드할 필요가 없습니다.
성공 또는 실패 여부에 관계없이 작업이 완료되면 콘솔 로그가 인쇄됩니다.
let url = URL(문자열: "https://example.com/high_solution_image.png")let processor = DownsamplingImageProcessor(size: imageView.bounds.size) |> RoundCornerImageProcessor(cornerRadius: 20)imageView.kf.indicatorType = .activity imageView.kf.setImage(포함: url, 자리 표시자: UIImage(이름: "placeholderImage"), 옵션: [.processor(processor),.scaleFactor(UIScreen.main.scale),.transition(.fade(1)), .cacheOriginalImage]){result inswitch result {case .success(let value):print("다음에 대해 수행된 작업: (value.source.url?.absoluteString ?? "")")case .failure(let error):print("작업 실패: (error.localizedDescription)")}}
일상생활에서 흔히 접할 수 있는 상황입니다. Kingfisher 없이 얼마나 많은 줄을 작성해야 하는지 생각해 보세요!
kf
확장의 팬이 아닌 경우 KF
빌더를 사용하고 메소드 호출을 연결하는 것을 선호할 수도 있습니다. 아래 코드는 동일한 작업을 수행합니다.
// `kf`를 사용합니다. (lowResolutionURL))],progressBlock: { receivedSize, totalSize in// 진행률 업데이트됨},completionHandler: { 결과 in// 완료})// `KF` 사용 builderKF.url(url) .placeholder(placeholderImage) .setProcessor(프로세서) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(지속시간: 0.25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress { receivedSize, totalSize in } .onSuccess { 결과 } .onFailure { 오류 발생 } .set(대상: imageView)
더 좋은 점은 나중에 SwiftUI로 전환하고 싶다면 위의 KF
KFImage
로 변경하면 됩니다.
struct ContentView: View {var body: some View {KFImage.url(url) .placeholder(placeholderImage) .setProcessor(processor) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(duration: 0.25) .lowDataModeSource(.network(lowResolutionURL) ) .onProgress { receivedSize, totalSize in } .onSuccess { 결과 } .onFailure { 오류 }}}
(UIKit/AppKit) iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ / watchOS 6.0+ / VisionOS 1.0+
(SwiftUI) iOS 14.0+ / macOS 11.0+ / tvOS 14.0+ / watchOS 7.0+ / VisionOS 1.0+
스위프트 5.9+
(UIKit/AppKit) iOS 12.0+ / macOS 10.14+ / tvOS 12.0+ / watchOS 5.0+ / VisionOS 1.0+
(SwiftUI) iOS 14.0+ / macOS 11.0+ / tvOS 14.0+ / watchOS 7.0+ / VisionOS 1.0+
스위프트 5.0+
프레임워크를 설치하고 사용하려면 다음 튜토리얼 중 하나를 참조하십시오.
UIKit 튜토리얼
SwiftUI 튜토리얼
또는 아래 방법 중 하나를 따를 수도 있습니다.
파일 > Swift 패키지 > 패키지 종속성 추가
https://github.com/onevcat/Kingfisher.git
추가
"8.0.0"으로 "다음 메이저까지"를 선택합니다.
source 'https://github.com/CocoaPods/Specs.git'platform :ios, '13.0'use_frameworks!target 'MyApp' do 포드 '킹피셔', '~> 8.0'end
릴리스 페이지를 열고 자산 섹션에서 최신 버전의 Kingfisher를 다운로드하세요.
Kingfisher.xcframework
를 프로젝트로 끌어서 대상(일반적으로 앱 대상)에 추가합니다.
대상을 선택하고 "일반" 탭에서 "프레임워크, 라이브러리 및 포함된 콘텐츠" 섹션을 찾은 다음 Embed Without Signing
Kingfisher로 설정합니다.
문서와 튜토리얼을 확인하세요:
문서 홈
시작하기
UIKit 튜토리얼
SwiftUI 튜토리얼
일반 작업 - 일반
일반 작업 - 캐시
일반 작업 - 다운로더
일반 작업 - 프로세서
Kingfisher 8.0 마이그레이션
Kingfisher 7.0 마이그레이션
이전 버전을 사용하는 경우 아래 가이드를 참조하여 마이그레이션 단계를 알아보세요.
Kingfisher를 가볍게 유지하고 싶습니다. 이 프레임워크는 이미지 다운로드 및 캐싱을 위한 간단한 솔루션을 제공하는 데 중점을 둡니다. 이는 프레임워크를 개선할 수 없다는 의미는 아닙니다. Kingfisher는 완벽함과는 거리가 멀기 때문에 더 나은 제품을 만들기 위해 필요하고 유용한 업데이트가 이루어질 것입니다.
어떤 기여나 끌어오기 요청도 환영합니다. 그러나 일부 기능을 구현하거나 불확실한 문제를 해결하려고 하기 전에 먼저 토론을 시작하는 것이 좋습니다. 풀 요청이 모든 테스트를 녹색으로 빌드할 수 있다면 감사하겠습니다. :)
킹피셔의 로고는 중국의 7개의 평면 모양으로 구성된 해부 퍼즐인 Tangram(七巧板)에서 영감을 받았습니다. 나는 그녀가 빠른 새가 아니라 물총새라고 생각하는데 누군가는 그녀가 비둘기라고 주장합니다. 이름을 지어줘야 할 것 같아요. 안녕하세요 여러분, 어떤 제안이 있으신가요?
Twitter나 Sina Weibo에서 저를 팔로우하고 연락해주세요. 문제를 발견하면 티켓을 개설하세요. Pull Request도 따뜻하게 환영합니다.
오픈 소스 프로젝트는 여러분의 도움 없이는 오래 지속될 수 없습니다. Kingfisher가 유용하다고 생각하시면 후원자가 되어 이 프로젝트를 지원하는 것을 고려해 보십시오. 귀하의 사용자 아이콘이나 회사 로고가 귀하의 홈 페이지 링크와 함께 내 블로그에 표시됩니다.
GitHub 후원자를 통해 후원자가 되세요. ❤️
특별히 감사드립니다:
Kingfisher는 MIT 라이센스에 따라 출시됩니다. 자세한 내용은 라이센스를 참조하세요.