Kingfisher ist eine leistungsstarke, reine Swift-Bibliothek zum Herunterladen und Zwischenspeichern von Bildern aus dem Internet. Es bietet Ihnen die Möglichkeit, in Ihrer nächsten App auf rein schnelle Weise mit Remote-Bildern zu arbeiten.
Asynchrones Herunterladen und Zwischenspeichern von Bildern.
Laden des Bildes entweder aus URLSession
-basierten Netzwerk oder aus lokal bereitgestellten Daten.
Nützliche Bildprozessoren und Filter werden bereitgestellt.
Mehrschichtiger Hybrid-Cache für Speicher und Festplatte.
Feine Kontrolle des Cache-Verhaltens. Anpassbares Ablaufdatum und Größenlimit.
Abbrechen des Herunterladens und automatische Wiederverwendung zuvor heruntergeladener Inhalte zur Verbesserung der Leistung.
Unabhängige Komponenten. Nutzen Sie den Downloader, das Caching-System und die Bildprozessoren je nach Bedarf separat.
Rufen Sie Bilder vorab ab und zeigen Sie sie aus dem Cache an, um Ihre App zu verbessern.
Erweiterungen für UIImageView
, NSImageView
, NSButton
, UIButton
, NSTextAttachment
, WKInterfaceImage
, TVMonogramView
und CPListItem
zum direkten Festlegen eines Bildes von einer URL.
Integrierte Übergangsanimation beim Einstellen von Bildern.
Anpassbarer Platzhalter und Indikator beim Laden von Bildern.
Bildverarbeitung und Bildformat einfach erweiterbar.
Unterstützung für den Low-Data-Modus.
SwiftUI-Unterstützung.
Swift 6 und Swift Concurrency (strenger Modus) vorbereitet.
Laden und Zwischenspeichern für Live-Fotos.
Der einfachste Anwendungsfall besteht darin, ein Bild mit der UIImageView
Erweiterung auf eine Bildansicht festzulegen:
import Kingfisherlet url = URL(string: „https://example.com/image.png“)imageView.kf.setImage(with: url)
Kingfisher lädt das Bild von url
herunter, sendet es sowohl an den Speicher-Cache als auch an den Festplatten-Cache und zeigt es in imageView
an. Wenn Sie später dieselbe URL festlegen, wird das Bild aus dem Cache abgerufen und sofort angezeigt.
Es funktioniert auch, wenn Sie SwiftUI verwenden:
var body: some View {KFImage(URL(string: "https://example.com/image.png")!)}
Mit den leistungsstarken Optionen können Sie mit Kingfisher schwierige Aufgaben auf einfache Weise erledigen. Zum Beispiel der folgende Code:
Lädt ein hochauflösendes Bild herunter.
Führt ein Downsampling durch, um es an die Bildansichtsgröße anzupassen.
Ermöglicht runde Kurven mit einem bestimmten Radius.
Zeigt beim Herunterladen eine Systemanzeige und ein Platzhalterbild an.
Wenn es vorbereitet ist, wird das kleine Miniaturbild mit einem Einblendeffekt animiert.
Das ursprüngliche große Bild wird außerdem zur späteren Verwendung auf der Festplatte zwischengespeichert, sodass es nicht erneut in einer Detailansicht heruntergeladen werden muss.
Wenn die Aufgabe abgeschlossen ist, wird ein Konsolenprotokoll gedruckt, das entweder Erfolg oder Misserfolg anzeigt.
let url = URL(string: "https://example.com/high_resolution_image.png")letprocessor = DownsamplingImageProcessor(size: imageView.bounds.size) |> RoundCornerImageProcessor(cornerRadius: 20)imageView.kf.indicatorType = .activity imageView.kf.setImage(with: url,placeholder: UIImage(named: „placeholderImage“),options: [.processor(processor),.scaleFactor(UIScreen.main.scale),.transition(.fade(1)), .cacheOriginalImage]){result inswitch result {case .success(let value):print("Aufgabe erledigt für: (value.source.url?.absoluteString ?? "")")case .failure(let error):print( „Auftrag fehlgeschlagen: (error.localizedDescription)“)}}
Dies ist eine häufige Situation, der ich in meiner täglichen Arbeit begegnen kann. Überlegen Sie, wie viele Zeilen Sie ohne Kingfisher schreiben müssen!
Wenn Sie kein Fan der kf
Erweiterung sind, können Sie auch lieber den KF
Builder verwenden und die Methodenaufrufe verketten. Der folgende Code macht dasselbe:
// Verwenden Sie „kf“ extensionimageView.kf.setImage(with: url,placeholder: placeholderImage,options: [.processor(processor),.loadDiskFileSynchronously,.cacheOriginalImage,.transition(.fade(0.25)),.lowDataMode(.network (lowResolutionURL))],progressBlock: { packetSize, totalSize in// Fortschritt aktualisiert},completionHandler: { result in// Done})// Use `KF` builderKF.url(url) .placeholder(placeholderImage) .setProcessor(Prozessor) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(Dauer: 0,25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress {empfangene Größe, totalSize in} .onSuccess { Ergebnis in } .onFailure { Fehler in } .set(to: imageView)
Und noch besser: Wenn Sie später zu SwiftUI wechseln möchten, ändern Sie einfach das KF
oben in KFImage
, und schon haben Sie Folgendes erledigt:
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 { Ergebnis in } .onFailure { Fehler in }}}
(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+
Swift 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+
Swift 5.0+
Informationen zur Installation und Verwendung des Frameworks finden Sie in einem der folgenden Tutorials:
UIKit-Tutorial
SwiftUI-Tutorial
Alternativ können Sie eine der folgenden Methoden anwenden.
Datei > Swift-Pakete > Paketabhängigkeit hinzufügen
Fügen Sie https://github.com/onevcat/Kingfisher.git
hinzu
Wählen Sie „Up to Next Major“ mit „8.0.0“
Quelle 'https://github.com/CocoaPods/Specs.git'platform :ios, '13.0'use_frameworks!target 'MyApp' tun Pod 'Kingfisher', '~> 8.0'Ende
Öffnen Sie die Release-Seite und laden Sie die neueste Version von Kingfisher aus dem Assets-Bereich herunter.
Ziehen Sie das Kingfisher.xcframework
in Ihr Projekt und fügen Sie es dem Ziel hinzu (normalerweise dem App-Ziel).
Wählen Sie Ihr Ziel aus, suchen Sie auf der Registerkarte „Allgemein“ nach dem Abschnitt „Frameworks, Bibliotheken und eingebettete Inhalte“ und stellen Sie „ Embed Without Signing
auf „Kingfisher“ ein.
Sehen Sie sich die Dokumentation und Tutorials an:
Dokumentations-Startseite
Erste Schritte
UIKit-Tutorial
SwiftUI-Tutorial
Allgemeine Aufgaben – Allgemein
Häufige Aufgaben – Cache
Häufige Aufgaben – Downloader
Allgemeine Aufgaben – Prozessor
Kingfisher 8.0 Migration
Kingfisher 7.0-Migration
Wenn Sie eine noch frühere Version verwenden, sehen Sie sich die folgenden Anleitungen an, um die Schritte für die Migration zu erfahren.
Ich möchte Kingfisher leicht halten. Dieses Framework konzentriert sich auf die Bereitstellung einer einfachen Lösung zum Herunterladen und Zwischenspeichern von Bildern. Das bedeutet nicht, dass das Framework nicht verbessert werden kann. Kingfisher ist alles andere als perfekt, daher werden notwendige und nützliche Updates vorgenommen, um es besser zu machen.
Alle Beitrags- und Pull-Anfragen sind herzlich willkommen. Bevor Sie jedoch planen, einige Funktionen zu implementieren oder versuchen, ein ungewisses Problem zu beheben, empfiehlt es sich, zunächst eine Diskussion zu eröffnen. Es wäre dankbar, wenn Ihre Pull-Anfragen mit allen grünen Tests erstellt werden könnten. :) :)
Das Logo von Kingfisher ist von Tangram (七巧板) inspiriert, einem Zerlegungspuzzle bestehend aus sieben flachen Formen aus China. Ich glaube, sie ist ein Eisvogel und kein Mauersegler, aber jemand besteht darauf, dass sie eine Taube ist. Ich schätze, ich sollte ihr einen Namen geben. Hallo Leute, habt ihr irgendwelche Vorschläge?
Folgen Sie mir und kontaktieren Sie mich auf Twitter oder Sina Weibo. Wenn Sie ein Problem feststellen, öffnen Sie ein Ticket. Auch Pull-Anfragen sind herzlich willkommen.
Open-Source-Projekte können ohne Ihre Hilfe nicht lange überleben. Wenn Sie Kingfisher nützlich finden, denken Sie bitte darüber nach, dieses Projekt zu unterstützen, indem Sie Sponsor werden. Ihr Benutzersymbol oder Ihr Firmenlogo erscheint auf meinem Blog mit einem Link zu Ihrer Homepage.
Werden Sie Sponsor über GitHub Sponsors. ❤️
Besonderer Dank geht an:
Kingfisher wird unter der MIT-Lizenz veröffentlicht. Einzelheiten finden Sie unter LIZENZ.