Kingfisher adalah perpustakaan Swift yang kuat dan murni untuk mengunduh dan menyimpan gambar dari web. Ini memberi Anda kesempatan untuk menggunakan cara Swift murni untuk bekerja dengan gambar jarak jauh di aplikasi Anda berikutnya.
Pengunduhan dan cache gambar asinkron.
Memuat gambar dari jaringan berbasis URLSession
atau data lokal yang disediakan.
Pemroses gambar dan filter yang berguna disediakan.
Cache hibrid multi-lapis untuk memori dan disk.
Kontrol yang baik pada perilaku cache. Tanggal kedaluwarsa dan batas ukuran dapat disesuaikan.
Pengunduhan yang dapat dibatalkan dan penggunaan kembali otomatis konten yang diunduh sebelumnya untuk meningkatkan kinerja.
Komponen independen. Gunakan pengunduh, sistem caching, dan pemroses gambar secara terpisah sesuai kebutuhan.
Mengambil gambar terlebih dahulu dan menampilkannya dari cache untuk meningkatkan aplikasi Anda.
Ekstensi untuk UIImageView
, NSImageView
, NSButton
, UIButton
, NSTextAttachment
, WKInterfaceImage
, TVMonogramView
dan CPListItem
untuk menyetel gambar secara langsung dari URL.
Animasi transisi bawaan saat mengatur gambar.
Placeholder dan indikator yang dapat disesuaikan saat memuat gambar.
Pemrosesan gambar dan format gambar yang dapat diperluas dengan mudah.
Dukungan Mode Data Rendah.
Dukungan SwiftUI.
Swift 6 & Konkurensi Swift (mode ketat) disiapkan.
Muat & cache untuk Live Photo.
Kasus penggunaan paling sederhana adalah menyetel gambar ke tampilan gambar dengan ekstensi UIImageView
:
import Kingfisherlet url = URL(string: "https://example.com/image.png")imageView.kf.setImage(dengan: url)
Kingfisher akan mengunduh gambar dari url
, mengirimkannya ke cache memori dan cache disk, dan menampilkannya di imageView
. Ketika Anda mengaturnya dengan URL yang sama nanti, gambar akan diambil dari cache dan segera ditampilkan.
Ini juga berfungsi jika Anda menggunakan SwiftUI:
var body: beberapa Tampilan {KFImage(URL(string: "https://example.com/image.png")!)}
Dengan opsi canggih, Anda dapat melakukan tugas sulit dengan Kingfisher dengan cara sederhana. Misalnya kode di bawah ini:
Mengunduh gambar resolusi tinggi.
Turunkan sampelnya agar sesuai dengan ukuran tampilan gambar.
Membuatnya membulat dengan radius tertentu.
Menampilkan indikator sistem dan gambar placeholder saat mengunduh.
Saat disiapkan, ini menganimasikan gambar mini kecil dengan efek "fade in".
Gambar besar asli juga di-cache ke disk untuk digunakan nanti, agar tidak perlu mengunduhnya lagi dalam tampilan detail.
Log konsol dicetak ketika tugas selesai, baik untuk keberhasilan atau kegagalan.
biarkan url = URL(string: "https://example.com/high_solving_image.png")biarkan prosesor = DownsamplingImageProcessor(ukuran: imageView.bounds.size) |> RoundCornerImageProcessor(cornerRadius: 20)imageView.kf.indicatorType = .activity imageView.kf.setImage(dengan: url,placeholder: UIImage(bernama: "placeholderImage"),pilihan: [.processor(processor),.scaleFactor(UIScreen.main.scale),.transition(.fade(1)), .cacheOriginalImage]){hasil peralihan hasil {case .success(biarkan nilai):print("Tugas selesai untuk: (value.source.url?.absoluteString ?? "")")case .failure(biarkan kesalahan):print("Pekerjaan gagal: (error.localizedDescription)")}}
Ini adalah situasi umum yang dapat saya temui dalam pekerjaan saya sehari-hari. Pikirkan berapa banyak baris yang perlu Anda tulis tanpa Kingfisher!
Jika Anda bukan penggemar ekstensi kf
, Anda juga dapat memilih untuk menggunakan pembuat KF
dan merangkai pemanggilan metode. Kode di bawah ini melakukan hal yang sama:
// Gunakan `kf` extensionimageView.kf.setImage(dengan: url,placeholder: placeholderImage,pilihan: [.processor(processor),.loadDiskFileSynchronously,.cacheOriginalImage,.transition(.fade(0.25)),.lowDataMode(.network (lowResolutionURL))],progressBlock: { ukuran yang diterima, ukuran total dalam// Kemajuan diperbarui},completionHandler: { hasil // Selesai})// Gunakan `KF` builderKF.url(url) .placeholder(Gambar placeholder) .setProcessor(prosesor) .loadDiskFileSinkron() .cacheMemoryOnly() .fade(durasi: 0,25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress { Ukuran yang diterima, ukuran total dalam } .onSuccess { menghasilkan } .onFailure { kesalahan dalam } .set(ke: tampilan gambar)
Dan lebih enaknya lagi, jika nanti ingin beralih ke SwiftUI, ubah saja KF
di atas menjadi KFImage
, dan selesai:
struct ContentView: Lihat {var body: beberapa Lihat {KFImage.url(url) .placeholder(placeholderImage) .setProcessor(prosesor) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(durasi: 0,25) .lowDataModeSource(.network(lowResolutionURL) ) .onProgress { Ukuran yang diterima, ukuran total dalam } .onSuccess { menghasilkan } .onFailure { kesalahan dalam }}}
(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+
Cepat 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+
Cepat 5.0+
Lihat salah satu tutorial berikut untuk menginstal dan menggunakan kerangka kerja:
Tutorial UIKit
Tutorial SwiftUI
Alternatifnya, Anda dapat mengikuti salah satu metode di bawah ini.
File > Paket Swift > Tambahkan Ketergantungan Paket
Tambahkan https://github.com/onevcat/Kingfisher.git
Pilih "Hingga Jurusan Berikutnya" dengan "8.0.0"
sumber 'https://github.com/CocoaPods/Specs.git'platform :ios, '13.0'use_frameworks!target 'MyApp' lakukan pod 'Kingfisher', '~> 8.0'end
Buka halaman rilis, unduh Kingfisher versi terbaru dari bagian aset.
Seret Kingfisher.xcframework
ke dalam proyek Anda dan tambahkan ke target (biasanya target aplikasi).
Pilih target Anda, di Tab "Umum", cari bagian "Frameworks, Libraries, and Embedded Content", atur Embed Without Signing
ke Kingfisher.
Periksa dokumentasi dan tutorial:
Beranda Dokumentasi
Memulai
Tutorial UIKit
Tutorial SwiftUI
Tugas Umum - Umum
Tugas Umum - Cache
Tugas Umum - Pengunduh
Tugas umum - Prosesor
Migrasi Kingfisher 8.0
Migrasi Kingfisher 7.0
Jika Anda menggunakan versi yang lebih lama, lihat panduan di bawah untuk mengetahui langkah-langkah migrasi.
Saya ingin menjaga Kingfisher tetap ringan. Kerangka kerja ini berfokus pada penyediaan solusi sederhana untuk mengunduh dan menyimpan gambar. Ini tidak berarti kerangka kerja tersebut tidak dapat diperbaiki. Kingfisher jauh dari sempurna, jadi pembaruan yang diperlukan dan berguna akan dilakukan untuk menjadikannya lebih baik.
Setiap permintaan kontribusi dan penarikan disambut dengan hangat. Namun, sebelum Anda berencana menerapkan beberapa fitur atau mencoba memperbaiki masalah yang tidak pasti, disarankan untuk membuka diskusi terlebih dahulu. Akan sangat dihargai jika permintaan penarikan Anda dapat dibuat dengan semua pengujian berwarna hijau. :)
Logo Kingfisher terinspirasi oleh Tangram (七巧板), sebuah teka-teki pembedahan yang terdiri dari tujuh bentuk datar dari Tiongkok. Saya yakin dia adalah burung pekakak, bukan burung gesit, tetapi seseorang bersikeras bahwa dia adalah seekor merpati. Kurasa aku harus memberinya nama. Hai teman-teman, apakah Anda punya saran?
Ikuti dan hubungi saya di Twitter atau Sina Weibo. Jika Anda menemukan masalah, buka tiket. Permintaan tarik juga diterima dengan hangat.
Proyek sumber terbuka tidak dapat bertahan lama tanpa bantuan Anda. Jika Anda merasa Kingfisher bermanfaat, mohon pertimbangkan untuk mendukung proyek ini dengan menjadi sponsor. Ikon pengguna atau logo perusahaan Anda muncul di blog saya dengan link ke halaman beranda Anda.
Menjadi sponsor melalui GitHub Sponsor. ❤️
Terima kasih khusus kepada:
Kingfisher dirilis di bawah lisensi MIT. Lihat LISENSI untuk detailnya.