Kingfisher は、Web から画像をダウンロードしてキャッシュするための強力な純粋な Swift ライブラリです。これにより、純粋な Swift の方法を使用して、次のアプリでリモート画像を操作できるようになります。
非同期画像のダウンロードとキャッシュ。
URLSession
ベースのネットワークまたはローカルで提供されたデータから画像を読み込みます。
便利な画像プロセッサーとフィルターが提供されます。
メモリとディスクの両方に対応する多層ハイブリッド キャッシュ。
キャッシュの動作を細かく制御します。カスタマイズ可能な有効期限とサイズ制限。
キャンセル可能なダウンロードと、以前にダウンロードしたコンテンツを自動再利用してパフォーマンスを向上させます。
独立したコンポーネント。必要に応じて、ダウンローダー、キャッシュ システム、画像プロセッサーを個別に使用します。
画像をプリフェッチしてキャッシュから表示し、アプリを強化します。
URL から画像を直接設定するためのUIImageView
、 NSImageView
、 NSButton
、 UIButton
、 NSTextAttachment
、 WKInterfaceImage
、 TVMonogramView
、 CPListItem
の拡張機能。
画像設定時のトランジションアニメーションを内蔵。
画像のロード中にカスタマイズ可能なプレースホルダーとインジケーター。
画像処理や画像フォーマットを簡単に拡張できます。
低データモードのサポート。
SwiftUIのサポート。
Swift 6 & Swift Concurrency (strict モード) を用意しました。
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(string: "https://example.com/high_resolution_image.png")letprocessor = DownsamplingImageProcessor(size: imageView.bounds.size) |> RoundCornerImageProcessor(cornerRadius: 20)imageView.kf.indicatorType = .activity imageView.kf.setImage(with: url,placeholder: UIImage(named: "placeholderImage"),options: [.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)")}}
日常の仕事でよく遭遇する状況です。カワセミなしで何行書く必要があるかを考えてください。
kf
拡張機能のファンではない場合は、 KF
ビルダーを使用してメソッド呼び出しを連鎖することもできます。以下のコードは同じことを行っています。
// `kf` を使用します extensionimageView.kf.setImage(with: url,placeholder: placeholderImage,options: [.processor(processor),.loadDiskFileSynchronously,.cacheOriginalImage,.transition(.fade(0.25)),.lowDataMode(.network) (lowResolutionURL))],progressBlock: {receivedSize, totalSize in// 進行状況が更新されました},completionHandler: { result in// Done})// `KF` を使用します builderKF.url(url) .placeholder(placeholderImage) .setProcessor(プロセッサ) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(持続時間: 0.25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress { 受信サイズ、合計サイズ } .onSuccess {結果は } .onFailure { エラー } .set(to:imageView)
さらに良いことに、後で SwiftUI に切り替えたい場合は、上記のKF
KFImage
に変更するだけで完了です。
struct ContentView: View {var body: some View {KFImage.url(url) .placeholder(placeholderImage) .setProcessor(processor) .loadDiskFileSynchronously() .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!ターゲット 'MyApp' do ポッド 'Kingfisher'、'~> 8.0'end
リリース ページを開き、アセット セクションから Kingfisher の最新バージョンをダウンロードします。
Kingfisher.xcframework
プロジェクトにドラッグし、ターゲット (通常はアプリのターゲット) に追加します。
ターゲットを選択し、「全般」タブで「フレームワーク、ライブラリ、埋め込みコンテンツ」セクションを見つけ、 Embed Without Signing
を Kingfisher に設定します。
ドキュメントとチュートリアルを確認してください。
ドキュメントホーム
はじめる
UIKit チュートリアル
SwiftUI チュートリアル
一般的なタスク - 全般
一般的なタスク - キャッシュ
一般的なタスク - ダウンローダー
一般的なタスク - プロセッサー
Kingfisher 8.0 の移行
Kingfisher 7.0 の移行
それより前のバージョンを使用している場合は、以下のガイドを参照して移行手順を確認してください。
Kingfisherを軽量化したい。このフレームワークは、画像のダウンロードとキャッシュのためのシンプルなソリューションを提供することに重点を置いています。これは、フレームワークを改善できないという意味ではありません。 Kingfisher は完璧には程遠いため、より良いものにするために必要かつ有用なアップデートが行われる予定です。
貢献およびプルリクエストは大歓迎です。ただし、一部の機能の実装を計画したり、不確実な問題を解決しようとする前に、まずディスカッションを開くことをお勧めします。プルリクエストがすべてのテストをグリーンにしてビルドできると幸いです。 :)
Kingfisher のロゴは、中国の 7 つの平面形状からなる解剖パズル、タングラム (七巧板) からインスピレーションを得ています。私は彼女はアマツバメではなくカワセミだと信じていますが、誰かが彼女をハトだと主張しています。彼女に名前を付けるべきだと思います。こんにちは、皆さん、何か提案はありますか?
Twitter または Sina Weibo で私をフォローしてご連絡ください。問題が見つかった場合は、チケットを開きます。プルリクエストも大歓迎です。
オープンソース プロジェクトは、皆さんの助けがなければ長く存続することはできません。 Kingfisher が役立つと思われる場合は、スポンサーになってこのプロジェクトを支援することをご検討ください。あなたのユーザー アイコンまたは会社のロゴが、あなたのホームページへのリンクとともに私のブログに表示されます。
GitHub Sponsors を通じてスポンサーになります。 ❤️
特別な感謝:
Kingfisher は MIT ライセンスに基づいてリリースされています。詳細については、「ライセンス」を参照してください。