Kingfisher源碼解析系列,由于水平有限,哪里有錯(cuò),肯請(qǐng)不吝賜教
- Kingfisher源碼解析之使用
- Kingfisher源碼解析之Options解釋
- Kingfisher源碼解析之加載流程
- Kingfisher源碼解析之加載動(dòng)圖
- Kingfisher源碼解析之ImageCache
- Kingfisher源碼解析之Processor和CacheSerializer
- Kingfisher源碼解析之ImagePrefetcher
- targetCache,originalCache
- 類型ImageCache,Kingfisher中的緩存管理器,提供內(nèi)存和磁盤緩存
- targetCache最終展示出來(lái)的緩存管理器
- originalCache原始數(shù)據(jù)的緩存管理器
- 默認(rèn)值都為nil,為nil時(shí),使用ImageCache(name: "default")
- downloader
- 類型ImageDownloader,圖片下載器,提供圖片下載的功能
- 默認(rèn)值為nil,為nil時(shí),使用ImageDownloader(name: "default")
- downloadPriority 下載優(yōu)先級(jí)
- transition
- 類型ImageTransition,默認(rèn)是為ImageTransition.none
- 為imageView顯示image的時(shí)候提供過(guò)渡動(dòng)畫
- forceTransition
- 類型為Bool,默認(rèn)值false
- 是否強(qiáng)制使用過(guò)渡動(dòng)畫,當(dāng)值為true時(shí),transition不為.none時(shí)就使用過(guò)渡動(dòng)畫,當(dāng)值為false時(shí),只有transition不為.none并且不使用緩存時(shí),才使用緩存動(dòng)畫
- forceRefresh 是否強(qiáng)制刷新,若值為true,則不使用緩存
- fromMemoryCacheOrRefresh 當(dāng)值為true時(shí),刷新的時(shí)候,若使用緩存,則只使用內(nèi)存緩存,不去磁盤緩存
- cacheMemoryOnly 是否只使用內(nèi)存緩存
- onlyFromCache 是否只從緩存中加載
- backgroundDecode 是否在子線程去解碼
- preloadAllAnimationData
- 是否預(yù)加載GIF圖每一幀畫面,默認(rèn)值為false
- 若使用UIImageView.setImage(),去加載圖片,則會(huì)被強(qiáng)制設(shè)置成true,因?yàn)?/li>
@objc extension UIImageView { func shouldPreloadAllAnimation() -> Bool { return true } } public func setImage( with source: Source?, placeholder: Placeholder? = nil, options: KingfisherOptionsInfo? = nil ... -> DownloadTask? { ... //若shouldPreloadAllAnimation()的值為true //則把preloadAllAnimationData設(shè)為true //而ImageView中的shouldPreloadAllAnimation()一直為true if base.shouldPreloadAllAnimation() { options.preloadAllAnimationData = true } ... } - onlyLoadFirstFrame 若圖片是GIF圖時(shí),是否只顯示第一幀
- callbackQueue,processingQueue
- callbackQueue,圖片處理結(jié)束之后,回調(diào)所在的隊(duì)列,默認(rèn)值mainCurrentOrAsync
- processingQueue,處理圖片時(shí)所在的隊(duì)列,比如利用processor給圖片添加圓角等操作時(shí),所在的隊(duì)列,默認(rèn)使用一個(gè)串行的子隊(duì)列
- 一共有四個(gè)值可選擇.mainAsync,.mainCurrentOrAsync,.untouch,.dispatch(DispatchQueue)
- .mainAsync主線程中異步執(zhí)行
- .mainCurrentOrAsync,若當(dāng)前線程是主線程,則直接執(zhí)行,否則在主線程異步執(zhí)行
- .untouch 不改變當(dāng)前所在的線程
- .dispatch(DispatchQueue) 在指定的隊(duì)列中執(zhí)行
- requestModifier 發(fā)送請(qǐng)求時(shí)對(duì)原始的請(qǐng)求進(jìn)行修改,返回新的Request
- redirectHandler 當(dāng)請(qǐng)求發(fā)生重定向是,自定義的一些處理
- processor 加工者,自定義data|image轉(zhuǎn)成image的邏輯,
- imageModifier image修飾器,對(duì)image做一些修改,比如返回image.withRenderingMode(renderingMode)
- cacheSerializer 定義圖片序列化和反序列化
- keepCurrentImageWhileLoading 當(dāng)加載一個(gè)新圖時(shí),是否要保持當(dāng)前的圖片
- cacheOriginalImage 是否要緩存原始的數(shù)據(jù)
- onFailureImage 加載失敗時(shí),要展示的圖片
- alsoPrefetchToMemory 預(yù)加載時(shí),需要從磁盤加載時(shí),是否也需要同步到內(nèi)存中
- loadDiskFileSynchronously 從磁盤中加載時(shí),是否同步的去加載
- memoryCacheExpiration,diskCacheExpiration 設(shè)置內(nèi)存、磁盤緩存過(guò)期時(shí)間
- memoryCacheAccessExtendingExpiration
- 當(dāng)從內(nèi)存、磁盤中取圖片時(shí),往后延長(zhǎng)過(guò)期時(shí)間的策略
- 有以下幾個(gè)值:.none,.cacheTime,.expirationTime(_ expiration: StorageExpiration)
- .none保持原來(lái)的過(guò)期時(shí)間
- .cacheTime 設(shè)置過(guò)期時(shí)間為當(dāng)前時(shí)間加上原來(lái)的過(guò)期時(shí)間
- .expirationTime(_ expiration: StorageExpiration) 設(shè)置過(guò)期時(shí)間到指定時(shí)間
- alternativeSources 當(dāng)加載失敗時(shí),可供替代的數(shù)據(jù)源
- onDataReceived 接收到數(shù)據(jù)時(shí),需要回調(diào)時(shí),可設(shè)置此屬性,比如setImage時(shí)設(shè)置的DownloadProgressBlock,就是在里面封裝了此屬性