Kingfisher é uma biblioteca poderosa e pura para baixar e armazenar imagens em cache da web. Ele oferece a oportunidade de usar uma maneira totalmente rápida de trabalhar com imagens remotas em seu próximo aplicativo.
Download e armazenamento em cache de imagens assíncronas.
Carregando imagem de rede baseada em URLSession
ou de dados fornecidos localmente.
Processadores de imagem e filtros úteis fornecidos.
Cache híbrido de múltiplas camadas para memória e disco.
Controle preciso do comportamento do cache. Data de validade e limite de tamanho personalizáveis.
Download cancelável e reutilização automática de conteúdo baixado anteriormente para melhorar o desempenho.
Componentes independentes. Use o downloader, o sistema de cache e os processadores de imagem separadamente conforme necessário.
Pré-busca de imagens e exibição delas no cache para impulsionar seu aplicativo.
Extensões para UIImageView
, NSImageView
, NSButton
, UIButton
, NSTextAttachment
, WKInterfaceImage
, TVMonogramView
e CPListItem
para definir diretamente uma imagem de um URL.
Animação de transição integrada ao definir imagens.
Espaço reservado e indicador personalizáveis ao carregar imagens.
Processamento de imagem extensível e formato de imagem facilmente.
Suporte ao modo de dados baixos.
Suporte SwiftUI.
Swift 6 e Swift Concurrency (modo estrito) preparados.
Carregar e armazenar em cache para Live Photo.
O caso de uso mais simples é definir uma imagem para uma visualização de imagem com a extensão UIImageView
:
importar URL do Kingfisherlet = URL (string: "https://example.com/image.png")imageView.kf.setImage (com: url)
O Kingfisher baixará a imagem de url
, enviará para o cache de memória e para o cache de disco e a exibirá em imageView
. Quando você definir o mesmo URL posteriormente, a imagem será recuperada do cache e mostrada imediatamente.
Também funciona se você usar SwiftUI:
var body: alguma visualização {KFImage(URL(string: "https://example.com/image.png")!)}
Com opções poderosas, você pode realizar tarefas difíceis com o Kingfisher de maneira simples. Por exemplo, o código abaixo:
Baixa uma imagem de alta resolução.
Reduz a resolução para corresponder ao tamanho da visualização da imagem.
Torna os cantos arredondados com um determinado raio.
Mostra um indicador do sistema e uma imagem de espaço reservado durante o download.
Quando preparado, ele anima a pequena imagem em miniatura com um efeito de "fade in".
A imagem grande original também é armazenada em cache no disco para uso posterior, para evitar o download novamente em uma visualização detalhada.
Um log do console é impresso quando a tarefa é concluída, seja por sucesso ou falha.
deixe url = URL (string: "https://example.com/high_resolution_image.png") deixe processador = DownsamplingImageProcessor (tamanho: imageView.bounds.size) |> RoundCornerImageProcessor (cornerRadius: 20) imageView.kf.indicatorType = .atividade imageView.kf.setImage (com: url, espaço reservado: UIImage (nomeado: "placeholderImage"), opções: [.processor (processador), .scaleFactor (UIScreen.main.scale), .transition (.fade (1)), .cacheOriginalImage]){resultado emswitch resultado {case .success(let value):print("Tarefa concluída para: (value.source.url?.absoluteString ?? "")")case .failure(let error):print( "Falha no trabalho: (error.localizedDescription)")}}
É uma situação comum que posso encontrar no meu trabalho diário. Pense em quantas linhas você precisa escrever sem o Kingfisher!
Se você não é fã da extensão kf
, também pode preferir usar o construtor KF
e encadear as invocações de método. O código abaixo está fazendo a mesma coisa:
// Use `kf` extensionimageView.kf.setImage(com: url,placeholder: placeholderImage,options: [.processor(processador),.loadDiskFileSynchronously,.cacheOriginalImage,.transition(.fade(0.25)),.lowDataMode(.network (lowResolutionURL))],progressBlock: {recebidoSize, totalSize in// Progresso atualizado},completionHandler: {resultado em// Concluído})// Use `KF` builderKF.url(url) .placeholder(placeholderImagem) .setProcessor(processador) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade (duração: 0,25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress {recebidoSize, totalSize em} .onSuccess {resultado em} .onFailure {erro em} .set(para:imageView)
E melhor ainda, se mais tarde você quiser mudar para SwiftUI, basta alterar o KF
acima para KFImage
e pronto:
estrutura ContentView: Visualizar {var body: some View {KFImage.url(url) .placeholder(placeholderImage) .setProcessor(processador) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(duração: 0,25) .lowDataModeSource(.network(lowResolutionURL) ) .onProgress {recebidoSize, totalSize em } .onSuccess {resultado em } .onFailure {erro em }}}
(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 um dos seguintes tutoriais para instalar e usar a estrutura:
Tutorial do UIKit
Tutorial SwiftUI
Alternativamente, você pode seguir qualquer um dos métodos abaixo.
Arquivo > Pacotes Swift > Adicionar Dependência de Pacote
Adicione https://github.com/onevcat/Kingfisher.git
Selecione "Até o próximo major" com "8.0.0"
fonte 'https://github.com/CocoaPods/Specs.git'platform:ios, '13.0'use_frameworks!target 'MyApp' do pod 'Kingfisher', '~> 8.0'fim
Abra a página de lançamento, baixe a versão mais recente do Kingfisher na seção de ativos.
Arraste o Kingfisher.xcframework
para o seu projeto e adicione-o ao destino (geralmente o destino do aplicativo).
Selecione seu alvo, na guia "Geral", encontre a seção "Frameworks, Libraries, and Embedded Content", defina Embed Without Signing
como Kingfisher.
Confira a documentação e tutoriais:
Página inicial da documentação
Começando
Tutorial do UIKit
Tutorial SwiftUI
Tarefas Comuns - Geral
Tarefas Comuns - Cache
Tarefas Comuns - Downloader
Tarefas comuns - Processador
Migração do Kingfisher 8.0
Migração do Kingfisher 7.0
Se você estiver usando uma versão ainda anterior, consulte os guias abaixo para conhecer as etapas de migração.
Quero manter o Kingfisher leve. Esta estrutura se concentra em fornecer uma solução simples para download e armazenamento em cache de imagens. Isso não significa que a estrutura não possa ser melhorada. O Kingfisher está longe de ser perfeito, por isso serão feitas atualizações necessárias e úteis para torná-lo melhor.
Quaisquer solicitações de contribuição e pull são muito bem-vindas. No entanto, antes de planejar implementar alguns recursos ou tentar corrigir um problema incerto, é recomendável abrir primeiro uma discussão. Agradeceríamos se suas solicitações pull pudessem ser construídas com todos os testes verdes. :)
O logotipo da Kingfisher é inspirado no Tangram (七巧板), um quebra-cabeça de dissecação composto por sete formas planas da China. Acredito que ela seja um guarda-rios em vez de um andorinhão, mas alguém insiste que ela é um pombo. Acho que deveria dar um nome a ela. Olá pessoal, vocês têm alguma sugestão?
Siga-me e entre em contato comigo no Twitter ou Sina Weibo. Se você encontrar um problema, abra um ticket. Solicitações pull também são calorosamente bem-vindas.
Projetos de código aberto não podem durar muito sem a sua ajuda. Se você acha que o Kingfisher é útil, considere apoiar este projeto tornando-se um patrocinador. O ícone do usuário ou logotipo da empresa aparece no meu blog com um link para sua página inicial.
Torne-se um patrocinador através do GitHub Sponsors. ❤️
Agradecimentos especiais a:
Kingfisher é lançado sob a licença do MIT. Consulte LICENÇA para obter detalhes.