Kingfisher هي مكتبة قوية وسريعة لتنزيل الصور وتخزينها مؤقتًا من الويب. فهو يوفر لك فرصة لاستخدام طريقة سريعة خالصة للعمل مع الصور البعيدة في تطبيقك التالي.
تنزيل الصور غير المتزامنة والتخزين المؤقت.
تحميل الصورة من الشبكات المستندة إلى URLSession
أو البيانات المقدمة محليًا.
يتم توفير معالجات الصور والمرشحات المفيدة.
ذاكرة تخزين مؤقت هجينة متعددة الطبقات لكل من الذاكرة والقرص.
التحكم الدقيق في سلوك ذاكرة التخزين المؤقت. تاريخ انتهاء الصلاحية قابل للتخصيص والحد الأقصى للحجم.
يمكن إلغاء التنزيل وإعادة استخدام المحتوى الذي تم تنزيله سابقًا تلقائيًا لتحسين الأداء.
مكونات مستقلة. استخدم برنامج التنزيل ونظام التخزين المؤقت ومعالجات الصور بشكل منفصل حسب حاجتك.
الجلب المسبق للصور وإظهارها من ذاكرة التخزين المؤقت لتعزيز تطبيقك.
ملحقات UIImageView
و NSImageView
و NSButton
و UIButton
و NSTextAttachment
و WKInterfaceImage
و TVMonogramView
و CPListItem
لتعيين صورة مباشرة من عنوان URL.
الرسوم المتحركة الانتقالية المضمنة عند ضبط الصور.
عنصر نائب ومؤشر قابلان للتخصيص أثناء تحميل الصور.
معالجة الصور الموسعة وتنسيق الصورة بسهولة.
دعم وضع البيانات المنخفضة.
دعم سويفتوي.
تم إعداد Swift 6 وSwift Concurrency (الوضع الصارم).
تحميل وذاكرة التخزين المؤقت للصور الحية.
إن أبسط حالة استخدام هي تعيين صورة على طريقة عرض الصورة باستخدام ملحق UIImageView
:
import Kingfisherlet url = URL(سلسلة: "https://example.com/image.png")imageView.kf.setImage(with: url)
سيقوم Kingfisher بتنزيل الصورة من url
، وإرسالها إلى كل من ذاكرة التخزين المؤقت للذاكرة وذاكرة التخزين المؤقت على القرص، وعرضها في imageView
. عند تعيينها بنفس عنوان URL لاحقًا، سيتم استرداد الصورة من ذاكرة التخزين المؤقت وسيتم عرضها على الفور.
يعمل أيضًا إذا كنت تستخدم SwiftUI:
var body: بعض طرق العرض {KFIImage(URL(string: "https://example.com/image.png")!)}
بفضل الخيارات القوية، يمكنك القيام بالمهام الصعبة مع Kingfisher بطريقة بسيطة. على سبيل المثال الكود أدناه:
تنزيل صورة عالية الدقة.
قم بتقليص حجمها لتتناسب مع حجم عرض الصورة.
يجعلها مستديرة الزاوية بنصف قطر معين.
يعرض مؤشر النظام وصورة العنصر النائب أثناء التنزيل.
عند التحضير، يقوم بتحريك الصورة المصغرة الصغيرة بتأثير "التلاشي".
يتم أيضًا تخزين الصورة الأصلية الكبيرة مؤقتًا على القرص لاستخدامها لاحقًا، للتخلص من تنزيلها مرة أخرى بطريقة العرض التفصيلي.
تتم طباعة سجل وحدة التحكم عند انتهاء المهمة، إما للنجاح أو الفشل.
Let url = URL(string: "https://example.com/high_resolution_image.png") اسمح للمعالج = 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]){النتيجة inswitch result {case .success(let value):print("تم إنجاز المهمة من أجل: (value.source.url?.absoluteString)" ??
إنها حالة شائعة يمكن أن أواجهها في عملي اليومي. فكر في عدد الأسطر التي تحتاج إلى كتابتها بدون الرفراف!
إذا لم تكن من محبي ملحق kf
، فيمكنك أيضًا تفضيل استخدام KF
builder وتقييد استدعاءات الطريقة. الكود أدناه يفعل نفس الشيء:
// استخدم `kf` ExtensionimageView.kf.setImage(with: url,placeholder: placeholderImage,options: [.processor(processor),.loadDiskFileSynchronously,.cacheOriginalImage,.transition(.fade(0.25)),.lowDataMode(.network (lowResolutionURL))],progressBlock: { تلقى الحجم، الحجم الإجمالي في // التقدم محدث}، معالج الإكمال: { النتيجة في // تم})// استخدم `KF` builderKF.url(url) .placeholder(placeholderImage) .setProcessor (المعالج) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(المدة: 0.25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress {الحجم المستلم، الحجم الإجمالي في } .onSuccess {النتيجة في} .onFailure { خطأ في } .set(إلى: imageView)
والأفضل من ذلك، إذا كنت تريد التبديل إلى SwiftUI لاحقًا، فما عليك سوى تغيير KF
أعلاه إلى KFImage
، وبذلك تكون قد قمت بما يلي:
هيكل ContentView: عرض {var body: some View {KFIImage.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
سويفتوي البرنامج التعليمي
وبدلاً من ذلك، يمكنك اتباع إحدى الطرق أدناه.
ملف > حزم سويفت > إضافة تبعية الحزمة
أضف https://github.com/onevcat/Kingfisher.git
حدد "ما يصل إلى التخصص التالي" مع "8.0.0"
المصدر "https://github.com/CocoaPods/Specs.git"platform:ios، '13.0'use_frameworks!target'MyApp' do جراب 'Kingfisher'، '~> 8.0'end
افتح صفحة الإصدار، وقم بتنزيل أحدث إصدار من Kingfisher من قسم الأصول.
اسحب Kingfisher.xcframework
إلى مشروعك وأضفه إلى الهدف (عادةً هدف التطبيق).
حدد هدفك، في علامة التبويب "عام"، ابحث عن قسم "الأطر والمكتبات والمحتوى المضمن"، وقم بتعيين Embed Without Signing
على Kingfisher.
تحقق من الوثائق والبرامج التعليمية:
الصفحة الرئيسية للتوثيق
ابدء
البرنامج التعليمي UIKit
سويفتوي البرنامج التعليمي
المهام المشتركة - عام
المهام المشتركة - ذاكرة التخزين المؤقت
المهام المشتركة - تنزيل
المهام المشتركة - المعالج
الرفراف 8.0 الهجرة
الرفراف 7.0 الهجرة
إذا كنت تستخدم إصدارًا أقدم، فراجع الأدلة أدناه لمعرفة خطوات الترحيل.
أريد أن أبقي الرفراف خفيف الوزن. يركز هذا الإطار على توفير حل بسيط لتنزيل الصور وتخزينها مؤقتًا. هذا لا يعني أنه لا يمكن تحسين الإطار. Kingfisher أبعد ما يكون عن الكمال، لذا سيتم إجراء تحديثات ضرورية ومفيدة لجعله أفضل.
نرحب ترحيبا حارا بأي طلبات المساهمة والسحب. ومع ذلك، قبل أن تخطط لتطبيق بعض الميزات أو محاولة إصلاح مشكلة غير مؤكدة، يوصى بفتح مناقشة أولاً. سيكون من دواعي تقديرنا أن يتم إنشاء طلبات السحب الخاصة بك مع جميع الاختبارات باللون الأخضر. :)
شعار Kingfisher مستوحى من Tangram (七巧板)، وهو لغز تشريح يتكون من سبعة أشكال مسطحة من الصين. أعتقد أنها طائر الرفراف وليس طائرًا سريعًا، لكن أحدهم يصر على أنها حمامة. أعتقد أنني يجب أن أعطيها اسما. مرحبا يا شباب، هل لديكم أي اقتراحات؟
تابعني واتصل بي على Twitter أو Sina Weibo. إذا وجدت مشكلة، افتح تذكرة. نرحب ترحيبا حارا بطلبات السحب أيضًا.
لا يمكن للمشاريع مفتوحة المصدر أن تستمر طويلاً دون مساعدتك. إذا وجدت Kingfisher مفيدًا، فيرجى التفكير في دعم هذا المشروع من خلال أن تصبح راعيًا. يظهر رمز المستخدم أو شعار الشركة الخاص بك على مدونتي مع رابط إلى صفحتك الرئيسية.
كن راعيًا من خلال رعاة GitHub. ❤️
شكر خاص ل:
تم إصدار Kingfisher بموجب ترخيص MIT. راجع الترخيص للحصول على التفاصيل.