À propos du projet
Kingfisher est une bibliothèque puissante en Swift pur pour télécharger et mettre en cache des images depuis le web. Elle offre une approche entièrement en Swift pour travailler avec des images distantes dans votre prochaine application.
## Fonctionnalités
- Téléchargement et mise en cache asynchrones des images.
- Chargement d'images via la mise en réseau basée sur URLSession ou à partir de données locales.
- Processeurs et filtres d'images utiles fournis.
- Cache hybride multicouche pour la mémoire et le disque.
- Contrôle fin du comportement du cache avec date d'expiration et limite de taille personnalisables.
- Sondage asynchrone du cache opt-in dans KingfisherManager pour éviter de bloquer le thread appelant lors des vérifications du cache disque.
- Téléchargement annulable et réutilisation automatique du contenu téléchargé précédemment pour améliorer les performances.
- Composants indépendants : utilisez le téléchargeur, le système de cache et les processeurs d'images séparément selon vos besoins.
- Préchargement des images et affichage depuis le 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.
- Placeholder et indicateur personnalisables pendant le chargement des images.
- Traitement d'images et formats d'images extensibles facilement.
- Prise en charge du mode Low Data.
- Prise en charge de SwiftUI.
- Préparé pour Swift 6 et Swift Concurrency (mode strict).
- Chargement et cache pour Live Photo.
## Kingfisher 101
Le cas d'utilisation le plus simple consiste à définir une image sur une vue d'image avec l'extension UIImageView :
```swift
import Kingfisher
let url = URL(string: "https://example.com/image.png")
imageView.kf.setImage(with: url)
```
Kingfisher téléchargera l'image depuis l'URL, l'enverra à la fois dans le cache mémoire et le cache disque, et l'affichera dans imageView. Lorsque vous définissez la même URL plus tard, l'image sera récupérée depuis le cache et affichée immédiatement.
Cela fonctionne également avec SwiftUI :
```swift
var body: some View {
KFImage(URL(string: "https://example.com/image.png")!)
}
```
## Un Exemple Plus Avancé
Avec les options puissantes, vous pouvez accomplir des tâches difficiles avec Kingfisher de manière simple. Par exemple, le code ci-dessous :
1. Télécharge une image haute résolution.
2. La réduit pour correspondre à la taille de la vue d'image.
3. Lui applique des coins arrondis avec un rayon donné.
4. Affiche un indicateur système et une image placeholder pendant le téléchargement.
5. Une fois prête, anime la petite image miniature avec un effet "fondu en entrée".
6. L'image originale grande est également mise en cache sur disque pour une utilisation ultérieure, évitant de la télécharger à nouveau dans une vue de détail.
7. Un journal console est imprimé lorsque la tâche se termine, que ce soit en succès ou en échec.
```swift
let url = URL(string: "https://example.com/high_resolution_image.png")
let processor = 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 in
switch result {
case .success(let value):
print("Tâche terminée pour : \(value.source.url?.absoluteString ?? "")")
case .failure(let error):
print("Échec de la tâche : \(error.localizedDescription)")
}
}
```
C'est une situation courante que je rencontre dans mon travail quotidien. Pensez au nombre de lignes que vous devriez écrire sans Kingfisher !
## Chaînage de Méthodes
Si vous n'êtes pas fan de l'extension kf, vous pouvez également préférer utiliser le constructeur KF et chaîner les appels de méthodes. Le code ci-dessous fait la même chose :
```swift
// Utilisation de l'extension `kf`
imageView.kf.setImage(
with: url,
placeholder: placeholderImage,
options: [
.processor(processor),
.loadDiskFileSynchronously,
.cacheOriginalImage,
.transition(.fade(0.25)),
.lowDataMode(.network(lowResolutionURL))
],
progressBlock: { receivedSize, totalSize in
// Progression mise à jour
},
completionHandler: { result in
// Terminé
}
)
// Utilisation du constructeur `KF`
KF.url(url)
.placeholder(placeholderImage)
.setProcessor(processor)
.loadDiskFileSynchronously()
.cacheMemoryOnly()
.fade(duration: 0.25)
.lowDataModeSource(.network(lowResolutionURL))
.onProgress { receivedSize, totalSize in }
.onSuccess { result in }
.onFailure { error in }
.set(to: imageView)
```
Et encore mieux, si plus tard vous voulez passer à SwiftUI, changez simplement le KF ci-dessus en KFImage, et c'est fait :
```swift
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 { result in }
.onFailure { error in }
}
}
```
## Exigences
### Branche de développement actuelle
- iOS 15.0+ / macOS 12.0+ / tvOS 15.0+ / watchOS 9.0+ / visionOS 1.0+
- Compilateur Xcode 26.0+ / Swift 6.2+
### Kingfisher 8.0
- (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+
### Kingfisher 7.0
- (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+
## Installation
Consultez l'un des tutoriels suivants pour installer et utiliser le framework :
- [Tutoriel UIKit](https://swiftpackageindex.com/onevcat/kingfisher/master/tutorials/kingfisher/gettingstarteduikit)
- [Tutoriel SwiftUI](https://swiftpackageindex.com/onevcat/kingfisher/master/tutorials/kingfisher/gettingstartedswiftui)
Alternativement, vous pouvez suivre l'une des méthodes ci-dessous.
### Swift Package Manager
- Fichier > Packages Swift > Ajouter une dépendance de package
- Ajoutez `https://github.com/onevcat/Kingfisher.git`
- Sélectionnez "Jusqu'à la prochaine version majeure" avec "8.0.0"
### CocoaPods
```ruby
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '13.0'
use_frameworks!
target 'MyApp' do
pod 'Kingfisher', '~> 8.0'
end
```
### Framework Pré-construit
1. Ouvrez la page des versions, téléchargez la dernière version de Kingfisher depuis la section des assets.
2. Glissez `Kingfisher.xcframework` dans votre projet et ajoutez-le à la cible (généralement la cible de l'application).
3. Sélectionnez votre cible, dans l'onglet "Général", trouvez la section "Frameworks, bibliothèques et contenu intégré", définissez `Embed Without Signing` sur Kingfisher.
## Documentation
Consultez la documentation et les tutoriels :
- [Accueil de la documentation](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher)
- [Pour commencer](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher/gettingstarted)
- [Tutoriel UIKit](https://swiftpackageindex.com/onevcat/kingfisher/master/tutorials/kingfisher/gettingstarteduikit)
- [Tutoriel SwiftUI](https://swiftpackageindex.com/onevcat/kingfisher/master/tutorials/kingfisher/gettingstartedswiftui)
- [Tâches courantes - Général](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher/commontasks)
- [Tâches courantes - Cache](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher/commontasks_cache)
- [Tâches courantes - Téléchargeur](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher/commontasks_downloader)
- [Tâches courantes - Processeur](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher/commontasks_processor)
### Migration
- [Migration Kingfisher 8.0](https://swiftpackageindex.com/onevcat/kingfisher/master/documentation/kingfisher/migration-to-8)
- [Migration Kingfisher 7.0](https://github.com/onevcat/Kingfisher/wiki/Kingfisher-7.0-Migration-Guide)
Si vous utilisez une version encore plus ancienne, consultez les guides ci-dessous pour connaître les étapes de migration.
## Autres
### Avenir de Kingfisher
Je veux garder Kingfisher léger. Ce framework se concentre sur la fourniture d'une solution simple pour télécharger et mettre en cache des images. Cela ne signifie pas que le framework ne peut pas être amélioré. Kingfisher est loin d'être parfait, donc des mises à jour nécessaires et utiles seront apportées pour le rendre meilleur.
### Développements et Tests
Toute contribution et toute demande de tirage sont chaleureusement bienvenues. Cependant, avant de planifier l'implémentation de certaines fonctionnalités ou d'essayer de corriger un problème incertain, il est recommandé d'ouvrir d'abord une discussion. Il serait apprécié que vos demandes de tirage puissent être construites avec tous les tests verts. :)
### À propos du logo
Le logo de Kingfisher est inspiré du Tangram (七巧板), un puzzle de dissection composé de sept formes plates de Chine. Je crois que c'est un martin-pêcheur plutôt qu'un martinet, mais certains insistent pour dire que c'est un pigeon. Je suppose que je devrais lui donner un nom. Salut les gars, avez-vous des suggestions ?
### Contact
Suivez-moi et contactez-moi sur Twitter ou Sina Weibo. Si vous trouvez un problème, ouvrez un ticket. Les demandes de tirage sont également chaleureusement bienvenues.
## Bailleurs de fonds et sponsors
Les projets open-source ne peuvent pas vivre longtemps sans votre aide. Si vous trouvez Kingfisher utile, veuillez envisager de 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. :heart:
Merci spécial à imgly et emergetools.
### Licence
Kingfisher est publié sous la licence MIT. Voir LICENSE pour plus de détails.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.