MediaBrowser 支持的 4 种数据源详解:UIImage、PHAsset、URL 与本地文件一次搞懂

📅 2026/8/19 17:56:35
MediaBrowser 支持的 4 种数据源详解:UIImage、PHAsset、URL 与本地文件一次搞懂
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),仅供参考