https://github.com/isaced/isphotobrowser
A simple iOS photo browser written in Swift.
https://github.com/isaced/isphotobrowser
imageviewer photo-browser photo-viewer swift
Last synced: 4 months ago
JSON representation
A simple iOS photo browser written in Swift.
- Host: GitHub
- URL: https://github.com/isaced/isphotobrowser
- Owner: isaced
- License: mit
- Created: 2016-11-08T08:02:24.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-05-03T04:27:50.000Z (over 8 years ago)
- Last Synced: 2025-05-28T15:16:44.068Z (5 months ago)
- Topics: imageviewer, photo-browser, photo-viewer, swift
- Language: Swift
- Homepage:
- Size: 1.46 MB
- Stars: 4
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ISPhotoBrowser [](https://travis-ci.org/isaced/ISPhotoBrowser) [](http://cocoapods.org/pods/ISPhotoBrowser)
ISPhotoBrowser 是一个新的照片大图浏览器基于 [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)
## 特性
- [x] 从本地文件或网络 URL 加载单图或多图
- [x] 从网络异步下载并缓存
- [x] 大图双指缩放和移动
- [x] 类似 Facebook/微信/微博 大图浏览,支持上/下滑动关闭
- [x] 默认内置使用 [Kingfisher](https://github.com/onevcat/Kingfisher) 下载图片
- [x] 横屏支持
- [x] 高度定制化
- [ ] 长图显示优化
- [ ] 下载进度展示
- [ ] GIF 支持## 要求
- iOS 8.0+
- Swift 3## 示例
Clone 这个项目,打开前先在 Example 文件夹执行 `pod install`
## 安装
ISPhotoBrowser 现已加入 [CocoaPods](http://cocoapods.org) 豪华午餐,请尽情享用:
```ruby
pod "ISPhotoBrowser"
```## 使用
通过以下代码片段示例来了解如何使用
1. 生成一组 ISPhoto:
```Swift
// URLs array
let urls = ["http://farm4.static.flickr.com/3567/3523321514_371d9ac42f_b.jpg",
"http://farm4.static.flickr.com/3629/3339128908_7aecabc34b_b.jpg",
"http://farm4.static.flickr.com/3364/3338617424_7ff836d55f_b.jpg",
"http://farm4.static.flickr.com/3590/3329114220_5fbc5bc92b_b.jpg"]// Create an array to store ISPhoto objects
let photos: [ISPhoto] = urls.map({ (url) -> ISPhoto in
return ISPhoto(url: URL(string: url)!)
})
```2. 创建 PhotoBrowser:
```
let photoBrowser = ISPhotoBrowser(photos: photos, originImage: imageView.image!, animatedFromView: imageView)
```3. 弹出:
```Swift
self.present(photoBrowser, animated: true, completion: nil)
```## 定制化
#### 相关属性:
```Swift
// 设置初始页
var initialPageIndex: Int = 0// 获取当前页码
var currentPageIndex: Int = 0// 背景颜色
var backgroundColor: UIColor = .black// 是否启用单击退出
var enableSingleTapDismiss: Bool = true
```#### 部分代理:
通过遵循 代理来接收一些事件回调和动画效果的支持。
```Swift
// 当显示出一张照片
func didShowPhotoAtIndex(_ index: Int)// 将要退出大图浏览器
func willDismissAtPageIndex(_ index: Int)// 已经退出大图浏览器
func didDismissAtPageIndex(_ index: Int)// 滑动到某一页
func didScrollToIndex(_ index: Int)// 询问某一张照片的原 view,为了做收回动画
func viewForPhoto(_ browser: ISPhotoBrowser, index: Int) -> UIView?
```#### 移出移入动画
如果你想实现类似微信点开大图隐藏原 view 并在退出大图浏览器后飞入的效果,可以通过以上代理中的 `didShowPhotoAtIndex` 和 `didDismissAtPageIndex` 来控制原 view 的隐藏和显示达到该效果,可以参照 Demo 的实现。
#### 自定义 ISPhoto
通过自定义 ISPhoto 可以轻松扩展你现有的模型,并且定制其加载逻辑,比如你不想使用内置的 Kingfisher 下载和缓存,可以通过自定义 ISPhoto 来实现特定的下载和缓存逻辑。
ISPhoto 其实也是遵循了 ISPhotoProtocol 这个协议来告知 ISPhotoBrowser 如何进行加载图片并回调,你完全可以不使用内置的 ISPhoto 而扩展自己的模型支持 ISPhotoBrowser 加载,同样只需要实现 ISPhotoProtocol 协议就好了,具体可参考 [ISPhoto](https://github.com/isaced/ISPhotoBrowser/blob/master/ISPhotoBrowser/Classes/ISPhoto.swift) 源码。
ISPhotoProtocol 大致的逻辑是这样,我们通过 `underlyingImage` 属性来存储待加载的图片,然后 ISPhotoBrowser 需要时会通过调用 `loadUnderlyingImageWithCallback` 来告知模型开始加载(从磁盘、或者网络)图片,这时模型内部开始执行加载逻辑,当完成后,设置 `underlyingImage` 属性并通过 `callback` 闭包回调 ISPhotoBrowser 告知图片已读取到内存,ISPhotoBrowser 这时就会刷新 UI 并展示该张图片。另外当 ISPhotoBrowser 收到内存警告时,会依次调用所有模型的 `unloadUnderlyingImage` 来清除图片以释放内存。
更多内容敬请查看示例工程
## 联系
如有任何使用上的问题或者其他想法,欢迎提交 issue 和 pull request 让我知道,如想联系我可以微博私信 [@isaced](http://weibo.com/u/2034474825/).
## 许可证
MIT