{"id":21389340,"url":"https://github.com/isaced/isphotobrowser","last_synced_at":"2025-06-15T02:33:53.732Z","repository":{"id":56915219,"uuid":"73163115","full_name":"isaced/ISPhotoBrowser","owner":"isaced","description":"A simple iOS photo browser written in Swift.","archived":false,"fork":false,"pushed_at":"2017-05-03T04:27:50.000Z","size":1527,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-05-28T15:16:44.068Z","etag":null,"topics":["imageviewer","photo-browser","photo-viewer","swift"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/isaced.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-11-08T08:02:24.000Z","updated_at":"2017-12-30T11:49:27.000Z","dependencies_parsed_at":"2022-08-21T03:50:27.240Z","dependency_job_id":null,"html_url":"https://github.com/isaced/ISPhotoBrowser","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/isaced/ISPhotoBrowser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isaced%2FISPhotoBrowser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isaced%2FISPhotoBrowser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isaced%2FISPhotoBrowser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isaced%2FISPhotoBrowser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/isaced","download_url":"https://codeload.github.com/isaced/ISPhotoBrowser/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isaced%2FISPhotoBrowser/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259912704,"owners_count":22931106,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["imageviewer","photo-browser","photo-viewer","swift"],"created_at":"2024-11-22T12:26:03.117Z","updated_at":"2025-06-15T02:33:53.711Z","avatar_url":"https://github.com/isaced.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ISPhotoBrowser [![CI Status](http://img.shields.io/travis/isaced/ISPhotoBrowser.svg?style=flat)](https://travis-ci.org/isaced/ISPhotoBrowser) [![Version](https://img.shields.io/cocoapods/v/ISPhotoBrowser.svg?style=flat)](http://cocoapods.org/pods/ISPhotoBrowser)\n\nISPhotoBrowser 是一个新的照片大图浏览器基于 [IDMPhotoBrowser](https://github.com/thiagoperes/IDMPhotoBrowser), [MWPhotoBrowser](https://github.com/mwaterfall/MWPhotoBrowser), [SKPhotoBrowser](https://github.com/suzuki-0000/SKPhotoBrowser) 实现，感谢前辈们的积淀，内部重新采用了 UICollectionView 构建，并且优化了其他一些使用，让源码逻辑更清晰，使用更方便，并计划长期维护以及增加更多特性。 [English](https://github.com/isaced/ISPhotoBrowser/blob/master/README_EN.md)\n\n\u003cimg width=\"300\" src=\"http://ww2.sinaimg.cn/large/006tKfTcgy1ff27gyoly7j30ku112x6k.jpg\" /\u003e\n\n## 特性\n\n- [x] 从本地文件或网络 URL 加载单图或多图\n- [x] 从网络异步下载并缓存\n- [x] 大图双指缩放和移动\n- [x] 类似 Facebook/微信/微博 大图浏览，支持上/下滑动关闭\n- [x] 默认内置使用 [Kingfisher](https://github.com/onevcat/Kingfisher) 下载图片\n- [x] 横屏支持\n- [x] 高度定制化\n- [ ] 长图显示优化\n- [ ] 下载进度展示\n- [ ] GIF 支持\n\n## 要求\n\n- iOS 8.0+\n- Swift 3\n\n## 示例\n\nClone 这个项目，打开前先在 Example 文件夹执行 `pod install`\n\n## 安装\n\nISPhotoBrowser 现已加入 [CocoaPods](http://cocoapods.org) 豪华午餐，请尽情享用：\n\n```ruby\npod \"ISPhotoBrowser\"\n```\n\n## 使用\n\n通过以下代码片段示例来了解如何使用\n\n1. 生成一组 ISPhoto:\n\n```Swift\n// URLs array\nlet urls = [\"http://farm4.static.flickr.com/3567/3523321514_371d9ac42f_b.jpg\",\n            \"http://farm4.static.flickr.com/3629/3339128908_7aecabc34b_b.jpg\",\n            \"http://farm4.static.flickr.com/3364/3338617424_7ff836d55f_b.jpg\",\n            \"http://farm4.static.flickr.com/3590/3329114220_5fbc5bc92b_b.jpg\"]\n\n// Create an array to store ISPhoto objects\nlet photos: [ISPhoto] = urls.map({ (url) -\u003e ISPhoto in\n        return ISPhoto(url: URL(string: url)!)\n    })\n```\n\n2. 创建 PhotoBrowser:\n\n```\nlet photoBrowser = ISPhotoBrowser(photos: photos, originImage: imageView.image!, animatedFromView: imageView)\n```\n\n3. 弹出:\n\n```Swift\nself.present(photoBrowser, animated: true, completion: nil)\n```\n\n## 定制化\n\n#### 相关属性：\n\n```Swift\n// 设置初始页\nvar initialPageIndex: Int = 0\n\n// 获取当前页码\nvar currentPageIndex: Int = 0\n\n// 背景颜色\nvar backgroundColor: UIColor = .black\n\n// 是否启用单击退出\nvar enableSingleTapDismiss: Bool = true\n```\n\n#### 部分代理：\n\n通过遵循 \u003cISPhotoBrowserDelegate\u003e 代理来接收一些事件回调和动画效果的支持。\n\n```Swift\n// 当显示出一张照片\nfunc didShowPhotoAtIndex(_ index: Int)\n\n// 将要退出大图浏览器\nfunc willDismissAtPageIndex(_ index: Int)\n\n// 已经退出大图浏览器\nfunc didDismissAtPageIndex(_ index: Int)\n\n// 滑动到某一页\nfunc didScrollToIndex(_ index: Int)\n\n// 询问某一张照片的原 view，为了做收回动画\nfunc viewForPhoto(_ browser: ISPhotoBrowser, index: Int) -\u003e UIView?\n```\n\n#### 移出移入动画\n\n如果你想实现类似微信点开大图隐藏原 view 并在退出大图浏览器后飞入的效果，可以通过以上代理中的 `didShowPhotoAtIndex` 和 `didDismissAtPageIndex` 来控制原 view 的隐藏和显示达到该效果，可以参照 Demo 的实现。\n\n#### 自定义 ISPhoto\n\n通过自定义 ISPhoto 可以轻松扩展你现有的模型，并且定制其加载逻辑，比如你不想使用内置的 Kingfisher 下载和缓存，可以通过自定义 ISPhoto 来实现特定的下载和缓存逻辑。\n\nISPhoto 其实也是遵循了 ISPhotoProtocol 这个协议来告知 ISPhotoBrowser 如何进行加载图片并回调，你完全可以不使用内置的 ISPhoto 而扩展自己的模型支持 ISPhotoBrowser 加载，同样只需要实现 ISPhotoProtocol 协议就好了，具体可参考 [ISPhoto](https://github.com/isaced/ISPhotoBrowser/blob/master/ISPhotoBrowser/Classes/ISPhoto.swift) 源码。\n\nISPhotoProtocol 大致的逻辑是这样，我们通过 `underlyingImage` 属性来存储待加载的图片，然后 ISPhotoBrowser 需要时会通过调用 `loadUnderlyingImageWithCallback` 来告知模型开始加载（从磁盘、或者网络）图片，这时模型内部开始执行加载逻辑，当完成后，设置  `underlyingImage` 属性并通过 `callback` 闭包回调 ISPhotoBrowser 告知图片已读取到内存，ISPhotoBrowser 这时就会刷新 UI 并展示该张图片。另外当 ISPhotoBrowser 收到内存警告时，会依次调用所有模型的 `unloadUnderlyingImage` 来清除图片以释放内存。\n\n更多内容敬请查看示例工程\n\n## 联系\n\n如有任何使用上的问题或者其他想法，欢迎提交 issue 和 pull request 让我知道，如想联系我可以微博私信 [@isaced](http://weibo.com/u/2034474825/).\n\n## 许可证\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisaced%2Fisphotobrowser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisaced%2Fisphotobrowser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisaced%2Fisphotobrowser/lists"}