Kingfisher — это мощная библиотека на чистом Swift для загрузки и кэширования изображений из Интернета. Это дает вам возможность использовать чистый способ Swift для работы с удаленными изображениями в вашем следующем приложении.
Асинхронная загрузка и кэширование изображений.
Загрузка изображения либо из сети на основе URLSession
, либо из локальных данных.
Предусмотрены полезные процессоры изображений и фильтры.
Многоуровневый гибридный кеш как для памяти, так и для диска.
Точный контроль над поведением кэша. Настраиваемый срок годности и ограничение размера.
Возможность отмены загрузки и автоматического повторного использования ранее загруженного контента для повышения производительности.
Независимые компоненты. Используйте загрузчик, систему кэширования и процессоры изображений отдельно по мере необходимости.
Предварительная выборка изображений и их показ из кеша для улучшения вашего приложения.
Расширения для UIImageView
, NSImageView
, NSButton
, UIButton
, NSTextAttachment
, WKInterfaceImage
, TVMonogramView
и CPListItem
для прямой установки изображения из URL-адреса.
Встроенная анимация перехода при настройке изображений.
Настраиваемый заполнитель и индикатор при загрузке изображений.
Легко расширяемая обработка изображений и форматирование изображений.
Поддержка режима низкого уровня данных.
Поддержка SwiftUI.
Swift 6 и Swift Concurrency (строгий режим) подготовлены.
Загрузка и кэширование Live Photo.
Самый простой вариант использования — установка изображения в представление изображения с расширением UIImageView
:
import Kingfisherlet url = URL(строка: "https://example.com/image.png")imageView.kf.setImage(with: url)
Kingfisher загрузит изображение по url
, отправит его как в кеш памяти, так и в кеш диска и отобразит в imageView
. Если позже вы установите тот же URL-адрес, изображение будет извлечено из кеша и немедленно отображено.
Это также работает, если вы используете SwiftUI:
var body: some View {KFImage(URL(string: "https://example.com/image.png")!)}
Благодаря мощным функциям Kingfisher вы сможете легко выполнять сложные задачи. Например, код ниже:
Загружает изображение в высоком разрешении.
Уменьшает его размер, чтобы он соответствовал размеру изображения.
Делает его закругленным с заданным радиусом.
Во время загрузки показывает системный индикатор и изображение-заполнитель.
При подготовке он анимирует маленькое миниатюрное изображение с эффектом «затухания».
Исходное большое изображение также кэшируется на диск для последующего использования, чтобы избежать повторной загрузки его в подробном виде.
Журнал консоли распечатывается после завершения задачи, в случае успеха или неудачи.
let url = URL(строка: «https://example.com/high_solve_image.png»)let процессор = DownsamplingImageProcessor(size: imageView.bounds.size) |> RoundCornerImageProcessor(cornerRadius: 20)imageView.kf.indicatorType = .activity imageView.kf.setImage(с: URL, заполнителем: UIImage(с именем: "placeholderImage"), параметры: [.processor(processor),.scaleFactor(UIScreen.main.scale),.transition(.fade(1)), .cacheOriginalImage]){result inswitch result {case .success(let value):print("Задача выполнена для: (value.source.url?.absoluteString ?? "")")case .failure(let error):print("Не удалось выполнить задание: (error.localizedDescription)")}}
Это обычная ситуация, с которой я могу столкнуться в своей повседневной работе. Подумайте, сколько строк вам нужно написать без Kingfisher!
Если вы не являетесь поклонником расширения kf
, вы также можете использовать построитель KF
и связать вызовы методов в цепочку. Код ниже делает то же самое:
// Используем расширение `kf`imageView.kf.setImage(with: url,placeholder: PlaceholderImage,options: [.processor(processor),.loadDiskFileSynchronous,.cacheOriginalImage,.transition(.fade(0.25)),.lowDataMode(.network (lowResolutionURL))],progressBlock: { gotSize, totalSize in// Progress обновлено},completionHandler: { результат // Готово})// Используйте `KF` builderKF.url(url) .placeholder(placeholderImage) .setProcessor(процессор) .loadDiskFileSynchronous() .cacheMemoryOnly() .fade(длительность: 0,25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress { полученный размер, общий размер в } .onSuccess {результат} .onFailure {ошибка в} .set(в: imageView)
И еще лучше, если позже вы захотите переключиться на SwiftUI, просто измените KF
выше на KFImage
, и все готово:
struct ContentView: Просмотр {var body: some View {KFImage.url(url).placeholder(placeholderImage).setProcessor(processor).loadDiskFileSynchronous() .cacheMemoryOnly() .fade(duration: 0.25).lowDataModeSource(.network(lowResolutionURL) ) .onProgress { полученный размер, общий размер в } .onSuccess { результат } .onFailure { ошибка }}}
(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+
Свифт 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+
Свифт 5.0+
Чтобы установить и использовать платформу, обратитесь к одному из следующих руководств:
Руководство по UIKit
Учебник по SwiftUI
Альтернативно вы можете воспользоваться любым из методов, описанных ниже.
Файл > Пакеты Swift > Добавить зависимость пакета
Добавьте https://github.com/onevcat/Kingfisher.git
Выберите «До следующего мажора» с «8.0.0».
источник 'https://github.com/CocoaPods/Specs.git'платформа: ios, '13.0'use_frameworks!target 'MyApp' do под 'Зимородок', '~> 8.0' конец
Откройте страницу релиза, загрузите последнюю версию Kingfisher из раздела ресурсов.
Перетащите фреймворк Kingfisher.xcframework
в свой проект и добавьте его в цель (обычно в цель приложения).
Выберите цель, на вкладке «Общие» найдите раздел «Рамки, библиотеки и встроенный контент», установите параметр Embed Without Signing
в Kingfisher».
Ознакомьтесь с документацией и учебными пособиями:
Документация Главная
Начиная
Руководство по UIKit
Учебник по SwiftUI
Общие задачи – Общие
Общие задачи — Кэш
Общие задачи — Загрузчик
Общие задачи — Процессор
Зимородок 8.0 Миграция
Зимородок 7.0 Миграция
Если вы используете еще более раннюю версию, ознакомьтесь с инструкциями ниже, чтобы узнать, как выполнить миграцию.
Я хочу, чтобы Kingfisher оставался легким. Эта платформа ориентирована на предоставление простого решения для загрузки и кэширования изображений. Это не означает, что структуру нельзя улучшить. Kingfisher далек от совершенства, поэтому будут вноситься необходимые и полезные обновления, чтобы сделать его лучше.
Любое участие и запросы на вытягивание горячо приветствуются. Однако, прежде чем вы планируете реализовать некоторые функции или попытаться исправить неопределенную проблему, рекомендуется сначала открыть обсуждение. Было бы признательно, если бы ваши запросы на включение могли быть построены с зелеными тестами. :)
Логотип Kingfisher вдохновлен Танграмом (七巧板), головоломкой, состоящей из семи плоских фигур из Китая. Я считаю, что это зимородок, а не стриж, но кто-то утверждает, что это голубь. Думаю, мне стоит дать ей имя. Привет, ребята, есть какие-нибудь предложения?
Следуйте за мной и свяжитесь со мной в Twitter или Sina Weibo. Если вы обнаружите проблему, откройте заявку. Запросы на вытягивание также приветствуются.
Проекты с открытым кодом не смогут долго прожить без вашей помощи. Если вы считаете Kingfisher полезным, рассмотрите возможность поддержки этого проекта, став спонсором. Ваш значок пользователя или логотип компании появится в моем блоге со ссылкой на вашу домашнюю страницу.
Станьте спонсором через GitHub Sponsors. ❤️
Особая благодарность:
Kingfisher выпускается под лицензией MIT. Подробности см. в разделе ЛИЦЕНЗИЯ.