
MediaBrowser 支持的 4 種數據源詳解UIImage、PHAsset、URL 與本地文件一次搞懂【免費下載鏈接】MediaBrowser A simple iOS photo and video browser with optional grid view, captions and selections written in Swift5.0項目地址: https://gitcode.com/gh_mirrors/me/MediaBrowser做 iOS 開發時圖片瀏覽器的數據源往往是第一個要面對的難題圖片可能來自內存、系統相冊、網絡甚至沙盒文件每種來源的加載方式都截然不同。MediaBrowser 是一個用 Swift 編寫的輕量級 iOS 圖片與視頻瀏覽器組件它把這一切統一成了 Media 模型原生支持 UIImage、PHAsset、URL 與本地文件 4 種數據源。本文面向新手用最通俗的方式帶你把這 4 種數據源的區別、寫法和適用場景一次搞懂。MediaBrowser 是什么先認識這個 iOS 圖片視頻瀏覽器MediaBrowser 是一個開源的 iOS 圖片/視頻瀏覽組件你只需要把圖片或視頻包裝成 Media 對象交給它就能立刻獲得完整的瀏覽體驗左右滑動翻頁、雙指縮放、網格視圖、標題說明caption、多選模式以及基于 SDWebImage 的網絡圖片下載與緩存。它的核心亮點在于「數據源無關」無論你的媒體來自哪里MediaBrowser 都一視同仁地展示這讓它非常適合新聞 App 的圖集、電商商品輪播、社交動態的圖片墻等場景。統一入口Media 模型如何裝下 4 種數據源所有數據源最終都匯聚到一個類Media源碼見MediaBrowser/Media.swift。它內部保存了圖片、URL、相冊資源等私有屬性并在加載時自動判斷該走哪條路。加載邏輯的判斷順序大致是有UIImage直接用有URL再看是本地文件路徑還是網絡地址是PHAsset則交給相冊框架異步取圖都沒有則顯示占位圖。也就是說你只需要挑選合適的初始化方法剩下的交給框架即可。數據源一UIImage —— 內存圖片最快加載UIImage 數據源是最簡單、最快的一種直接傳入內存中已有的圖片對象let media Media(image: someImage, caption: 我的圖片)適合這類場景App 內置資源從 Bundle 或 Assets.xcassets 加載的圖片截圖、Canvas 繪制生成的圖片相機拍照后立即展示的預覽圖因為圖片已經在內存里加載是同步且即時的不需要任何異步等待。Demo 中的localMediaPhoto方法就是這么實現的見MediaBrowserDemo/DemoData.swift。數據源二PHAsset —— 相冊資源的最佳搭檔當你的數據來自系統相冊如「選擇照片」功能PHAsset 數據源是最佳選擇let media Media(asset: phAsset, targetSize: CGSize(width: 800, height: 800))需要注意幾個要點targetSize指定請求的圖片尺寸框架內部用PHImageManager按需加載避免大圖撐爆內存自動識別視頻如果資源是視頻Media 會自動把isVideo置為 true支持 iCloud 照片內部開啟了isNetworkAccessAllowed云端的照片也能自動下載使用前記得申請相冊權限并import Photos。適合做相冊多選、拍照后的編輯流、以及「從相冊導入」類功能。數據源三URL —— 網絡圖片與視頻一站式加載URL 數據源是 MediaBrowser 最常用的場景之一網絡圖片和網絡視頻都支持let photo Media(url: webURL, caption: 網絡圖片) let video Media(videoURL: mp4URL, previewImageURL: thumbURL)網絡圖片會自動下載并由SDWebImage負責緩存二次瀏覽秒開網絡視頻需要額外提供一個預覽圖 URL播放前先展示封面加載過程中會通過通知上報進度可用于展示進度條適合新聞圖集、商品詳情、社交 Feed 等所有「圖片在服務器上」的場景。數據源四本地文件 —— 沙盒與 Bundle 文件輕松讀如果媒體已經以文件形式存在比如 App 沙盒、下載目錄或 Bundle 內置用本地文件數據源即可let url URL(fileURLWithPath: path) // 例如 Bundle 里的 mp4 media.videoURL url框架會通過URL.isFileURL識別出這是本地文件然后在后臺線程用UIImage(contentsOfFile:)加載不阻塞主界面。本地圖片和本地視頻都支持是「離線資源」「下載后瀏覽」場景的首選。4 種數據源怎么選一張對照表搞定數據源初始化方式適用場景加載方式UIImageMedia(image:)App 內置圖、截圖、拍照預覽同步速度最快PHAssetMedia(asset:targetSize:)系統相冊、圖片多選異步 按需縮放URL網絡Media(url:)/Media(videoURL:)新聞圖集、社交圖片、在線視頻異步 SDWebImage 緩存本地文件URL(fileURLWithPath:)Bundle 內置、沙盒下載文件后臺線程異步記住一條簡單的經驗圖在內存用 UIImage圖在相冊用 PHAsset圖在服務器用 URL圖在磁盤用本地文件就不會選錯。在 Demo 項目里動手體驗 4 種數據源紙上得來終覺淺強烈建議直接跑一遍官方 Demogit clone https://gitcode.com/gh_mirrors/me/MediaBrowser打開工程后運行 MediaBrowserDemo主界面提供了 9 個入口幾乎覆蓋了全部數據源組合單張圖片UIImage caption多圖與視頻混排本地文件 視頻 URL網格視圖UIImage圖片多選PHAsset 思路的演示網絡圖片 / 網絡視頻URL 數據源數據源的具體組織可以看MediaBrowserDemo/DemoData.swift頁面跳轉邏輯在MediaBrowserDemo/ViewController.swift照著改一改就能接入你自己的項目。常見問題占位圖、預緩存與取消加載問圖片加載失敗或還沒加載出來時顯示什么可以設置占位圖browser.placeholderImage (image: placeholder, isAppliedForAll: true)項目內置的默認占位圖長這樣問想讓翻頁更流暢有什么優化手段開啟預緩存先調用setCurrentIndex(at:)設置起始位置再打開preCachingEnabled并配合cachingImageCount控制預加載數量體驗會明顯提升。問如何中斷正在進行的加載調用media.cancelAnyLoading()即可取消當前圖片請求網絡請求和相冊請求都會一并終止。總結MediaBrowser 用一套統一的 Media 模型優雅地解決了 iOS 圖片瀏覽器最頭疼的數據源問題UIImage、PHAsset、URL 與本地文件 4 種數據源各有分工又無縫協作。對新手來說你只需要記住「數據在哪、就用哪個初始化方法」剩下的縮放、緩存、網格、選擇這些能力框架都已經幫你準備好了。快去克隆 Demo 親手試一試吧【免費下載鏈接】MediaBrowser A simple iOS photo and video browser with optional grid view, captions and selections written in Swift5.0項目地址: https://gitcode.com/gh_mirrors/me/MediaBrowser創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考