Kingfisher es una potente biblioteca puramente Swift para descargar y almacenar en caché imágenes desde la web. Le brinda la oportunidad de utilizar una forma puramente rápida de trabajar con imágenes remotas en su próxima aplicación.
Descarga y almacenamiento en caché de imágenes asincrónicas.
Cargando imagen desde una red basada en URLSession
o desde datos proporcionados localmente.
Procesadores de imágenes y filtros útiles proporcionados.
Caché híbrido de múltiples capas para memoria y disco.
Control fino sobre el comportamiento de la caché. Fecha de vencimiento y límite de tamaño personalizables.
Descarga cancelable y reutilización automática de contenido descargado anteriormente para mejorar el rendimiento.
Componentes independientes. Utilice el descargador, el sistema de almacenamiento en caché y los procesadores de imágenes por separado según sea necesario.
Precargar imágenes y mostrarlas desde el caché para mejorar su aplicación.
Extensiones para UIImageView
, NSImageView
, NSButton
, UIButton
, NSTextAttachment
, WKInterfaceImage
, TVMonogramView
y CPListItem
para configurar directamente una imagen desde una URL.
Animación de transición incorporada al configurar imágenes.
Marcador de posición e indicador personalizables al cargar imágenes.
Procesamiento de imágenes extensible y formato de imagen fácilmente.
Compatibilidad con el modo de datos bajos.
Soporte SwiftUI.
Swift 6 y Swift Concurrency (modo estricto) preparados.
Carga y caché para Live Photo.
El caso de uso más simple es configurar una imagen en una vista de imagen con la extensión UIImageView
:
importar URL de Kingfisherlet = URL(cadena: "https://example.com/image.png")imageView.kf.setImage(con: url)
Kingfisher descargará la imagen desde url
, la enviará tanto a la memoria caché como a la caché del disco, y la mostrará en imageView
. Cuando la configure con la misma URL más adelante, la imagen se recuperará del caché y se mostrará inmediatamente.
También funciona si usas SwiftUI:
cuerpo var: alguna vista {KFImage(URL(string: "https://example.com/image.png")!)}
Con las potentes opciones, puedes realizar tareas difíciles con Kingfisher de una manera sencilla. Por ejemplo, el siguiente código:
Descarga una imagen de alta resolución.
Reduce la resolución para que coincida con el tamaño de visualización de la imagen.
Hace que tenga esquinas redondeadas con un radio determinado.
Muestra un indicador del sistema y una imagen de marcador de posición durante la descarga.
Cuando está preparado, anima la pequeña imagen en miniatura con un efecto de "aparición gradual".
La imagen grande original también se almacena en caché en el disco para su uso posterior, para evitar descargarla nuevamente en una vista detallada.
Se imprime un registro de la consola cuando finaliza la tarea, ya sea en caso de éxito o fracaso.
let url = URL(cadena: "https://example.com/high_solving_image.png")let procesador = DownsamplingImageProcessor(tamaño: imageView.bounds.size) |> RoundCornerImageProcessor(cornerRadius: 20)imageView.kf.indicatorType = .actividad imageView.kf.setImage(con: url,marcador de posición: UIImage(llamado: "placeholderImage"), opciones: [.processor(procesador),.scaleFactor(UIScreen.main.scale),.transition(.fade(1)), .cacheOriginalImage]){resultado en el cambio de resultado {case .success(let value):print("Tarea realizada para: (value.source.url?.absoluteString ?? "")")case .failure(let error):print("Trabajo fallido: (error.localizedDescription)")}}
Es una situación común que puedo encontrar en mi trabajo diario. ¡Piensa en cuántas líneas necesitas escribir sin Kingfisher!
Si no eres fanático de la extensión kf
, también puedes preferir usar el generador KF
y encadenar las invocaciones de métodos. El siguiente código hace lo mismo:
// Utilice `kf` extensionimageView.kf.setImage(con: url,placeholder: placeholderImage,opciones: [.processor(processor),.loadDiskFileSynchronfully,.cacheOriginalImage,.transition(.fade(0.25)),.lowDataMode(.network (lowResolutionURL))],progressBlock: { tamaño recibido, tamaño total en// Progreso actualizado},completionHandler: { resultado en// Hecho})// Utilice el constructor `KF`KF.url(url) .placeholder(imagen de marcador de posición) .setProcessor(procesador) .loadDiskFileSincrónicamente() .cacheMemoryOnly() .fade(duración: 0,25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress {Tamaño recibido, Tamaño total en} .onSuccess {resultado en} .onFailure {error en} .set(a:imageView)
Y aún mejor, si más adelante deseas cambiar a SwiftUI, simplemente cambia el KF
de arriba a KFImage
y listo:
estructura ContentView: Ver {var cuerpo: alguna Ver {KFImage.url(url) .placeholder(placeholderImage) .setProcessor(procesador) .loadDiskFileSynchronfully() .cacheMemoryOnly() .fade(duración: 0,25) .lowDataModeSource(.network(lowResolutionURL) ) .onProgress { Tamaño recibido, Tamaño total en } .onSuccess { resultado en } .onFailure { error en }}}
(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+
Rápido 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+
Rápido 5.0+
Consulte uno de los siguientes tutoriales para instalar y utilizar el marco:
Tutorial UIKit
Tutorial de SwiftUI
Alternativamente, puede seguir cualquiera de los métodos siguientes.
Archivo > Paquetes Swift > Agregar dependencia del paquete
Agregue https://github.com/onevcat/Kingfisher.git
Seleccione "Hasta la siguiente especialidad" con "8.0.0"
fuente 'https://github.com/CocoaPods/Specs.git'platform:ios, '13.0'use_frameworks!target 'MyApp' hacer pod 'Kingfisher', '~> 8.0'end
Abra la página de lanzamiento, descargue la última versión de Kingfisher desde la sección de activos.
Arrastre el Kingfisher.xcframework
a su proyecto y agréguelo al destino (generalmente el destino de la aplicación).
Seleccione su objetivo, en la pestaña "General", busque la sección "Marcos, bibliotecas y contenido incrustado", configure Embed Without Signing
en Kingfisher.
Consulta la documentación y tutoriales:
Documentación Inicio
Empezando
Tutorial UIKit
Tutorial de SwiftUI
Tareas comunes: generales
Tareas comunes: caché
Tareas comunes: descargador
Tareas comunes: procesador
Migración de Kingfisher 8.0
Migración de Kingfisher 7.0
Si está utilizando una versión incluso anterior, consulte las guías a continuación para conocer los pasos para la migración.
Quiero que Kingfisher siga siendo ligero. Este marco se centra en proporcionar una solución sencilla para descargar y almacenar en caché imágenes. Esto no significa que el marco no pueda mejorarse. Kingfisher está lejos de ser perfecto, por lo que se realizarán actualizaciones necesarias y útiles para mejorarlo.
Cualquier contribución y solicitud de extracción es bienvenida. Sin embargo, antes de planear implementar algunas funciones o intentar solucionar un problema incierto, se recomienda abrir una discusión primero. Se agradecería que sus solicitudes de extracción pudieran compilarse con todas las pruebas en verde. :)
El logo de Kingfisher está inspirado en Tangram (七巧板), un rompecabezas de disección que consta de siete formas planas provenientes de China. Creo que es un martín pescador en lugar de un vencejo, pero alguien insiste en que es una paloma. Supongo que debería darle un nombre. Hola chicos, ¿tienen alguna sugerencia?
Sígueme y contáctame en Twitter o Sina Weibo. Si encuentra un problema, abra un ticket. Las solicitudes de extracción también son bienvenidas.
Los proyectos de código abierto no pueden vivir mucho tiempo sin su ayuda. Si considera que Kingfisher es útil, considere apoyar este proyecto convirtiéndose en patrocinador. Su ícono de usuario o logotipo de su empresa aparece en mi blog con un enlace a su página de inicio.
Conviértase en patrocinador a través de Patrocinadores de GitHub. ❤️
Un agradecimiento especial a:
Kingfisher se lanza bajo la licencia MIT. Consulte LICENCIA para obtener más detalles.