PhotoBrowser

JiongXingMIT活跃维护

轻量级 iOS 图片/视频浏览器,支持缩放转场、下拉关闭、无限循环和自定义单元格,无第三方依赖,UIKit 与 SwiftUI 都能用。

Lightweight, highly customizable iOS photo & video browser in Swift. Supports zoom transitions, drag-to-dismiss, pinch-to-zoom, infinite looping, custom cells and overlays. No third-party dependencies. Works with both UIKit and SwiftUI. 图片/视频媒体浏览器。

4.0.2发布于 2026-02-16 05:35 UTC1,439star225fork同步于 2026-11-07 07:33 UTC

怎么上手

由 README 提炼,执行前请确认
pod 'JXPhotoBrowser', '~> 4.2'
硬件要求按 README 说明

README 未说明

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

轻量可定制的 iOS 图片视频浏览器,基于 UICollectionView,不绑定数据模型和图片加载库

轻量级 iOS 图片/视频浏览器,支持缩放转场、下拉关闭、无限循环和自定义单元格,无第三方依赖,UIKit 与 SwiftUI 都能用。

核心能力

  • 基于 UICollectionView 实现水平/垂直整页浏览与无限循环
  • 支持双击、捏合缩放及可配置的固定双击倍率
  • 提供下拉关闭与 Zoom/Fade/None 三种转场
  • 通过自定义 Cell 与 Overlay 机制扩展界面
  • 支持程序化跳页、自动轮播与页间距设置

容易踩的坑

4.2 起最低系统为 iOS 15,需支持 iOS 12–14 的应用应固定使用 4.1.0;框架不内置图片加载库,需业务方自行设置 cell 图片;内嵌 Banner 模式必须用标准 View Controller containment 并关闭下拉关闭手势

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本4.0.2
  1. 4.0.2最新正式版2026-02-16 · 2026-02-16 05:35 UTC

    优化图片/视频双击放大的交互体验

  2. 4.0.12026-02-10 · 2026-02-10 12:07 UTC
    查看更新说明

    新增隐私声明文件

  3. 4.0.02026-02-10 · 2026-02-10 09:21 UTC
    查看更新说明

    基于 UICollectionView 的全面重构

  4. 3.1.52024-02-05 · 2024-02-05 06:51 UTC
    查看更新说明

    优化与修复已知问题

  5. 3.1.42023-10-15 · 2023-10-15 14:36 UTC

    这个版本没有写更新说明。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    JXPhotoBrowser

    CocoaPods SPM Supported Carthage Compatible License

    English Documentation

    JXPhotoBrowser 是一个轻量、可定制的 iOS 图片/视频浏览器。核心基于 UIKit 和 UICollectionView,支持缩放、拖拽关闭、循环滚动、自动轮播、Zoom/Fade 转场与自定义 Cell,不绑定业务数据模型,也不内置图片加载库。

    首页列表图片浏览下拉关闭
    首页列表图片浏览下拉关闭

    特性

    • UIKit 核心,SwiftUI 可通过桥接层集成
    • 水平/垂直整页浏览与无限循环
    • 双击、捏合缩放和可配置固定双击倍率
    • 下拉关闭、Zoom/Fade/None 转场
    • 程序化跳页、自动轮播和页间距
    • 自定义 Cell 与 Overlay 扩展机制
    • CocoaPods、SwiftPM、Carthage
    • iOS 15.0+、Swift 5.4+(SwiftUI 示例要求 iOS 16.0+)

    UIKit 和 SwiftUI 示例使用 Kingfisher 8.13+,需要 Xcode 26+(Swift 6.2+)。

    安装

    4.2 将最低系统从 iOS 12 提升到 iOS 15;仍需支持 iOS 12–14 的应用请固定使用 4.1.0。升级注意事项见 4.1 → 4.2 迁移指南。

    CocoaPods

    pod 'JXPhotoBrowser', '~> 4.2'
    

    Swift Package Manager

    dependencies: [
        .package(url: "https://github.com/JiongXing/PhotoBrowser", from: "4.2.0")
    ]
    

    Carthage

    github "JiongXing/PhotoBrowser"
    
    carthage update --use-xcframeworks --platform iOS
    

    三种集成方式都会携带 PrivacyInfo.xcprivacy。框架不追踪用户、不收集数据,也不使用 Required Reason API。

    快速开始

    import JXPhotoBrowser
    
    let browser = JXPhotoBrowserViewController()
    browser.delegate = self
    browser.initialIndex = indexPath.item
    browser.transitionType = .zoom
    browser.isLoopingEnabled = true
    browser.addOverlay(JXPageIndicatorOverlay())
    browser.present(from: self)
    
    extension ViewController: JXPhotoBrowserDelegate {
        func numberOfItems(in browser: JXPhotoBrowserViewController) -> Int {
            items.count
        }
    
        func photoBrowser(
            _ browser: JXPhotoBrowserViewController,
            cellForItemAt index: Int,
            at indexPath: IndexPath
        ) -> JXPhotoBrowserAnyCell {
            browser.dequeueReusableCell(
                withReuseIdentifier: JXZoomImageCell.reuseIdentifier,
                for: indexPath
            )
        }
    
        func photoBrowser(
            _ browser: JXPhotoBrowserViewController,
            willDisplay cell: JXPhotoBrowserAnyCell,
            at index: Int
        ) {
            guard let cell = cell as? JXZoomImageCell else { return }
            // 使用业务方选择的图片加载库设置 cell.imageView.image
        }
    
        func photoBrowser(
            _ browser: JXPhotoBrowserViewController,
            thumbnailViewAt index: Int
        ) -> UIView? {
            let indexPath = IndexPath(item: index, section: 0)
            return collectionView.cellForItem(at: indexPath)?.contentView
        }
    }
    

    数据变化后通过框架入口重载,不要直接操作内部 collectionView:

    browser.reloadData()                              // 保留并钳制当前页
    browser.reloadData(preservingCurrentPage: false) // 回到 initialIndex
    

    内嵌 Banner

    内嵌模式必须使用标准 View Controller containment,并关闭下拉关闭手势:

    let browser = JXPhotoBrowserViewController()
    browser.delegate = self
    browser.transitionType = .none
    browser.isDismissGestureEnabled = false
    browser.autoPlayInterval = 3
    browser.isAutoPlayEnabled = true
    
    addChild(browser)
    containerView.addSubview(browser.view)
    // 为 browser.view 添加约束
    browser.didMove(toParent: self)
    

    移除时依次调用 willMove(toParent: nil)、移除 view、removeFromParent()。

    文档

    已知限制

    • 浏览器默认固定竖屏;尺寸变化修复不改变默认方向策略。
    • 垂直滚动模式下不启用下拉关闭。
    • 每个 Cell 固定为浏览器整页尺寸;4.1 不再支持逐项自定义尺寸。

    CocoaPods 故障排查

    如果 Xcode 的 User Script Sandboxing 导致 CocoaPods 的资源复制或 framework 嵌入脚本明确报出沙盒访问错误,可在受影响 Target 中评估将 ENABLE_USER_SCRIPT_SANDBOXING 设为 NO。没有相关错误时无需修改该设置。

    License

    MIT License