Kingfisher เป็นไลบรารี่ Swift ที่ทรงพลังสำหรับการดาวน์โหลดและแคชรูปภาพจากเว็บ ช่วยให้คุณมีโอกาสใช้วิธี Pure-Swift ในการทำงานกับรูปภาพระยะไกลในแอปถัดไปของคุณ
การดาวน์โหลดและแคชรูปภาพแบบอะซิงโครนัส
กำลังโหลดรูปภาพจากเครือข่ายที่ใช้ URLSession
หรือข้อมูลที่ให้ไว้ในเครื่อง
มีโปรเซสเซอร์และฟิลเตอร์ภาพที่เป็นประโยชน์
แคชไฮบริดหลายชั้นสำหรับทั้งหน่วยความจำและดิสก์
ควบคุมพฤติกรรมแคชอย่างละเอียด วันหมดอายุและขีดจำกัดขนาดที่ปรับแต่งได้
การดาวน์โหลดที่ยกเลิกได้และการนำเนื้อหาที่ดาวน์โหลดก่อนหน้านี้กลับมาใช้ใหม่โดยอัตโนมัติเพื่อปรับปรุงประสิทธิภาพ
ส่วนประกอบที่เป็นอิสระ ใช้ตัวดาวน์โหลด ระบบแคช และตัวประมวลผลรูปภาพแยกกันตามที่คุณต้องการ
กำลังดึงรูปภาพล่วงหน้าและแสดงจากแคชเพื่อเพิ่มประสิทธิภาพแอปของคุณ
ส่วนขยายสำหรับ UIImageView
, NSImageView
, NSButton
, UIButton
, NSTextAttachment
, WKInterfaceImage
, TVMonogramView
และ CPListItem
เพื่อตั้งค่ารูปภาพโดยตรงจาก URL
ภาพเคลื่อนไหวการเปลี่ยนแปลงในตัวเมื่อตั้งค่ารูปภาพ
ตัวยึดตำแหน่งและตัวบ่งชี้ที่ปรับแต่งได้ในขณะที่โหลดภาพ
ขยายการประมวลผลภาพและจัดรูปแบบภาพได้อย่างง่ายดาย
รองรับโหมดข้อมูลต่ำ
รองรับ SwiftUI
เตรียม Swift 6 และ Swift Concurrency (โหมดเข้มงวด) แล้ว
โหลดและแคชสำหรับ Live Photo
กรณีการใช้งานที่ง่ายที่สุดคือการตั้งค่ารูปภาพเป็นมุมมองรูปภาพด้วยส่วนขยาย UIImageView
:
นำเข้า Kingfisherlet url = URL (สตริง: "https://example.com/image.png") imageView.kf.setImage (ด้วย: url)
Kingfisher จะดาวน์โหลดรูปภาพจาก url
ส่งไปที่แคชหน่วยความจำและดิสก์แคช และแสดงใน imageView
เมื่อคุณตั้งค่าด้วย URL เดียวกันในภายหลัง รูปภาพจะถูกดึงมาจากแคชและแสดงทันที
นอกจากนี้ยังใช้งานได้หากคุณใช้ SwiftUI:
var body: some View {KFImage(URL(string: "https://example.com/image.png")!)}
ด้วยตัวเลือกอันทรงพลัง คุณสามารถทำงานยาก ๆ กับ Kingfisher ด้วยวิธีง่ายๆ ตัวอย่างเช่น รหัสด้านล่าง:
ดาวน์โหลดภาพที่มีความละเอียดสูง
ลดขนาดตัวอย่างให้ตรงกับขนาดการดูภาพ
ทำให้โค้งมนตามรัศมีที่กำหนด
แสดงตัวบ่งชี้ระบบและรูปภาพตัวยึดขณะดาวน์โหลด
เมื่อเตรียมไว้ รูปภาพขนาดย่อขนาดเล็กจะเคลื่อนไหวพร้อมเอฟเฟกต์ "ค่อยๆ จางลง"
รูปภาพขนาดใหญ่ต้นฉบับยังถูกแคชไว้บนดิสก์เพื่อใช้ในภายหลัง เพื่อไม่ต้องดาวน์โหลดอีกครั้งในมุมมองรายละเอียด
บันทึกคอนโซลจะถูกพิมพ์เมื่องานเสร็จสิ้น ไม่ว่าจะสำเร็จหรือล้มเหลว
ให้ url = URL (สตริง: "https://example.com/high_solution_image.png") ให้โปรเซสเซอร์ = DownsamplingImageProcessor (ขนาด: imageView.bounds.size) |> RoundCornerImageProcessor (cornerRadius: 20) imageView.kf.indicatorType = .activity imageView.kf.setImage (ด้วย: url, placeholder: 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` extensionimageView.kf.setImage(กับ: url,placeholder: placeholderImage,ตัวเลือก: [.processor(processor),.loadDiskFileSynchronously,.cacheOriginalImage,.transition(.fade(0.25)),.lowDataMode(.network) (lowResolutionURL))],progressBlock: {ได้รับขนาด, TotalSize in// อัปเดตความคืบหน้า},completionHandler: { ผลลัพธ์ใน// เสร็จสิ้น})// ใช้ `KF` builderKF.url(url) .placeholder(placeholderImage) .setProcessor (โปรเซสเซอร์) .loadDiskFileSynchronously() .แคชMemoryOnly() .จาง(ระยะเวลา: 0.25) .lowDataModeSource(.network(lowResolutionURL)) .onProgress { ได้รับขนาด, ขนาดทั้งหมดเป็น } .onSuccess { ผลลัพธ์ใน } .onFailure { ข้อผิดพลาดใน } .set(ถึง: imageView)
และที่ดีไปกว่านั้น หากคุณต้องการเปลี่ยนมาใช้ SwiftUI ในภายหลัง เพียงเปลี่ยน KF
ด้านบนเป็น KFImage
เท่านี้คุณก็ทำเสร็จแล้ว:
struct ContentView: ดู {var body: some ดู {KFImage.url(url) .placeholder(placeholderImage) .setProcessor(processor) .loadDiskFileSynchronously() .cacheMemoryOnly() .fade(duration: 0.25) .lowDataModeSource(.network(lowResolutionURL) ) .onProgress { getsSize, TotalSize in } .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
เลือก "Up to Next Major" ด้วย "8.0.0"
แหล่งที่มา 'https://github.com/CocoaPods/Specs.git'platform :ios, '13.0'use_frameworks!target 'MyApp' ทำ พ็อด 'Kingfisher', '~> 8.0'end
เปิดหน้าเผยแพร่ ดาวน์โหลด Kingfisher เวอร์ชันล่าสุดจากส่วนเนื้อหา
ลาก Kingfisher.xcframework
ลงในโปรเจ็กต์ของคุณและเพิ่มลงในเป้าหมาย (โดยปกติจะเป็นเป้าหมายแอป)
เลือกเป้าหมายของคุณในแท็บ "ทั่วไป" ค้นหาส่วน "Frameworks, Libraries และ Embedded Content" ตั้งค่า Embed Without Signing
to Kingfisher
ตรวจสอบเอกสารและบทช่วยสอน:
หน้าแรกเอกสาร
เริ่มต้นใช้งาน
บทช่วยสอน UIKit
บทช่วยสอน SwiftUI
งานทั่วไป - ทั่วไป
งานทั่วไป - แคช
งานทั่วไป - ตัวดาวน์โหลด
งานทั่วไป - ตัวประมวลผล
การโยกย้ายนกกระเต็น 8.0
การโยกย้ายนกกระเต็น 7.0
หากคุณใช้เวอร์ชันก่อนหน้า โปรดดูคำแนะนำด้านล่างเพื่อทราบขั้นตอนในการย้ายข้อมูล
ฉันต้องการให้ Kingfisher มีน้ำหนักเบา เฟรมเวิร์กนี้มุ่งเน้นไปที่การจัดหาโซลูชันที่เรียบง่ายสำหรับการดาวน์โหลดและการแคชรูปภาพ นี่ไม่ได้หมายความว่าไม่สามารถปรับปรุงกรอบงานได้ Kingfisher ยังห่างไกลจากความสมบูรณ์แบบ ดังนั้นการอัปเดตที่จำเป็นและมีประโยชน์จะทำให้ดีขึ้น
การมีส่วนร่วมและการร้องขอใด ๆ จะได้รับการต้อนรับอย่างอบอุ่น อย่างไรก็ตาม ก่อนที่คุณจะวางแผนที่จะใช้คุณสมบัติบางอย่างหรือพยายามแก้ไขปัญหาที่ไม่แน่นอน ขอแนะนำให้เปิดการสนทนาก่อน คงจะดีมากหากคำขอดึงของคุณสามารถสร้างได้โดยมีการทดสอบทั้งหมดเป็นสีเขียว -
โลโก้ของ Kingfisher ได้รับแรงบันดาลใจจาก Tangram (七巧板) ซึ่งเป็นปริศนาผ่าที่ประกอบด้วยรูปทรงแบนเจ็ดรูปทรงจากประเทศจีน ฉันเชื่อว่าเธอเป็นนกกระเต็นแทนที่จะเป็นนกที่รวดเร็ว แต่มีคนยืนยันว่าเธอเป็นนกพิราบ ฉันคิดว่าฉันควรจะตั้งชื่อให้เธอ สวัสดีเพื่อนๆ คุณมีข้อเสนอแนะใดๆ บ้างไหม?
ติดตามและติดต่อฉันทาง Twitter หรือ Sina Weibo หากคุณพบปัญหา ให้เปิดตั๋ว คำขอดึงก็ยินดีต้อนรับอย่างอบอุ่นเช่นกัน
โครงการโอเพ่นซอร์สไม่สามารถอยู่ได้นานหากไม่ได้รับความช่วยเหลือจากคุณ หากคุณพบว่า Kingfisher มีประโยชน์ โปรดพิจารณาสนับสนุนโครงการนี้ด้วยการเป็นผู้สนับสนุน ไอคอนผู้ใช้หรือโลโก้บริษัทของคุณปรากฏบนบล็อกของฉันพร้อมลิงก์ไปยังหน้าแรกของคุณ
ร่วมเป็นผู้สนับสนุนผ่านผู้สนับสนุน GitHub
ขอขอบคุณเป็นพิเศษสำหรับ:
Kingfisher ได้รับการเผยแพร่ภายใต้ใบอนุญาต MIT ดูใบอนุญาตสำหรับรายละเอียด