Kingfisher est une bibliothèque puissante et purement Swift pour télécharger et mettre en cache des images à partir du Web. Il vous offre la possibilité d'utiliser une méthode purement Swift pour travailler avec des images distantes dans votre prochaine application.
Téléchargement et mise en cache d'images asynchrones.
Chargement de l'image à partir d'un réseau basé sur URLSession
ou de données fournies localement.
Processeurs d'images et filtres utiles fournis.
Cache hybride multicouche pour la mémoire et le disque.
Contrôle fin du comportement du cache. Date d’expiration et limite de taille personnalisables.
Téléchargement annulable et réutilisation automatique du contenu téléchargé précédent pour améliorer les performances.
Composants indépendants. Utilisez le téléchargeur, le système de mise en cache et les processeurs d'images séparément selon vos besoins.
Précharger les images et les afficher à partir du cache pour booster votre application.
Extensions pour UIImageView
, NSImageView
, NSButton
, UIButton
, NSTextAttachment
, WKInterfaceImage
, TVMonogramView
et CPListItem
pour définir directement une image à partir d'une URL.
Animation de transition intégrée lors de la définition des images.
Espace réservé et indicateur personnalisables lors du chargement des images.
Traitement d'image extensible et format d'image facilement.
Prise en charge du mode données faibles.
Prise en charge de SwiftUI.
Swift 6 et Swift Concurrency (mode strict) préparés.
Charger et mettre en cache pour Live Photo.
Le cas d'utilisation le plus simple consiste à définir une image sur une vue d'image avec l'extension UIImageView
:
importer Kingfisherlet url = URL(string: "https://example.com/image.png")imageView.kf.setImage(with: url)
Kingfisher téléchargera l'image à partir de url
, l'enverra à la fois au cache mémoire et au cache disque et l'affichera dans imageView
. Lorsque vous la définirez ultérieurement avec la même URL, l'image sera récupérée du cache et affichée immédiatement.
Cela fonctionne également si vous utilisez SwiftUI :
var body : some View {KFImage(URL(string: "https://example.com/image.png")!)}
Grâce aux options puissantes, vous pouvez effectuer des tâches difficiles avec Kingfisher de manière simple. Par exemple, le code ci-dessous :
Télécharge une image haute résolution.
Le sous-échantillonne pour qu'il corresponde à la taille de l'image.
Le rend arrondi avec un rayon donné.
Affiche un indicateur système et une image d'espace réservé pendant le téléchargement.
Une fois préparé, il anime la petite image miniature avec un effet de « fondu entrant ».
La grande image originale est également mise en cache sur le disque pour une utilisation ultérieure, afin d'éviter de la télécharger à nouveau dans une vue détaillée.
Un journal de la console est imprimé une fois la tâche terminée, en cas de réussite ou d'échec.
let url = URL (chaîne : "https://example.com/high_resolution_image.png") let processeur = DownsamplingImageProcessor (taille : imageView.bounds.size) |> RoundCornerImageProcessor (cornerRadius : 20) imageView.kf.indicatorType = .activity imageView.kf.setImage(avec : url,espace réservé : UIImage(nommé : "placeholderImage"),options : [.processor(processor),.scaleFactor(UIScreen.main.scale),.transition(.fade(1)), .cacheOriginalImage]){result inswitch result {case .success(let value):print("Tâche effectuée pour : (value.source.url?.absoluteString ?? "")")case .failure(let error):print( "Le travail a échoué : (error.localizedDescription)")}}
C'est une situation courante que je peux rencontrer dans mon travail quotidien. Pensez au nombre de lignes que vous devrez écrire sans Kingfisher !
Si vous n'êtes pas fan de l'extension kf
, vous pouvez également préférer utiliser le builder KF
et enchaîner les invocations de méthodes. Le code ci-dessous fait la même chose :
// Utilisez `kf` extensionimageView.kf.setImage(avec : url,placeholder : placeholderImage,options : [.processor(processor),.loadDiskFileSynchronously,.cacheOriginalImage,.transition(.fade(0.25)),.lowDataMode(.network (lowResolutionURL))],progressBlock : {reçuSize, totalSize in//Progression mise à jour},completionHandler : { result in//Terminé})//Utiliser `KF` builderKF.url(url) .placeholder(placeholderImage) .setProcessor(processeur) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(durée : 0,25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress { taille reçue, taille totale dans } .onSuccess { résultat dans } .onFailure { erreur dans } .set (vers : imageView)
Et encore mieux, si plus tard vous souhaitez passer à SwiftUI, changez simplement le KF
ci-dessus en KFImage
, et vous avez fait :
struct ContentView : View {var body : some View {KFImage.url(url) .placeholder(placeholderImage) .setProcessor(processor) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(duration : 0,25) .lowDataModeSource(.network(lowResolutionURL) ) .onProgress { taille reçue, taille totale dans } .onSuccess { résultat dans } .onFailure { erreur dans }}}
(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+
Rapide 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+
Rapide 5.0+
Reportez-vous à l'un des didacticiels suivants pour installer et utiliser le framework :
Tutoriel UIKit
Tutoriel SwiftUI
Vous pouvez également suivre l’une des méthodes ci-dessous.
Fichier > Packages Swift > Ajouter une dépendance de package
Ajouter https://github.com/onevcat/Kingfisher.git
Sélectionnez "Jusqu'à la prochaine majeure" avec "8.0.0"
source 'https://github.com/CocoaPods/Specs.git'platform :ios, '13.0'use_frameworks!target 'MyApp' faire pod 'Kingfisher', '~> 8.0'fin
Ouvrez la page de version, téléchargez la dernière version de Kingfisher à partir de la section des ressources.
Faites glisser le Kingfisher.xcframework
dans votre projet et ajoutez-le à la cible (généralement la cible de l'application).
Sélectionnez votre cible, dans l'onglet "Général", recherchez la section "Frameworks, bibliothèques et contenu intégré", définissez l' Embed Without Signing
sur Kingfisher.
Consultez la documentation et les tutoriels :
Accueil des documents
Commencer
Tutoriel UIKit
Tutoriel SwiftUI
Tâches courantes – Général
Tâches courantes - Cache
Tâches courantes - Téléchargeur
Tâches courantes - Processeur
Migration du Martin-pêcheur 8.0
Migration du Martin-pêcheur 7.0
Si vous utilisez une version encore antérieure, consultez les guides ci-dessous pour connaître les étapes de migration.
Je veux garder Kingfisher léger. Ce framework vise à fournir une solution simple pour télécharger et mettre en cache des images. Cela ne signifie pas que le cadre ne peut pas être amélioré. Kingfisher est loin d'être parfait, des mises à jour nécessaires et utiles seront donc apportées pour l'améliorer.
Toute contribution et demande de tirage sont les bienvenues. Cependant, avant d’envisager d’implémenter certaines fonctionnalités ou d’essayer de résoudre un problème incertain, il est recommandé d’ouvrir d’abord une discussion. Il serait apprécié que vos demandes d'extraction puissent être construites avec tous les tests verts. :)
Le logo de Kingfisher est inspiré du Tangram (七巧板), un puzzle de dissection composé de sept formes plates provenant de Chine. Je crois que c'est un martin-pêcheur au lieu d'un martinet, mais quelqu'un insiste sur le fait que c'est un pigeon. Je suppose que je devrais lui donner un nom. Salut les gars, avez-vous des suggestions ?
Suivez-moi et contactez-moi sur Twitter ou Sina Weibo. Si vous rencontrez un problème, ouvrez un ticket. Les demandes de tirage sont également les bienvenues.
Les projets open source ne peuvent pas vivre longtemps sans votre aide. Si vous trouvez Kingfisher utile, pensez à soutenir ce projet en devenant sponsor. Votre icône d'utilisateur ou le logo de votre entreprise apparaît sur mon blog avec un lien vers votre page d'accueil.
Devenez sponsor via GitHub Sponsors. ❤️
Un merci spécial à :
Kingfisher est publié sous licence MIT. Voir LICENCE pour plus de détails.