JiongXing / PhotoBrowser

Elegant photo browser in Swift. 图片与视频浏览器。
MIT License
1.32k stars 207 forks source link

关于横向布局的问题 #75

Closed gaohomway closed 6 years ago

gaohomway commented 6 years ago

看了设计思路,非常棒的设计思路,优在细节! 不太理解为什么UICollectionView中嵌套UIScrollView? UIScrollView就可以解决翻页,以及放大等问题,出于什么原因用了UICollectionView呢?

JiongXing commented 6 years ago

用UICollectionView是用它的复用cell能力呀。如果只用UIScrollView做翻页,而又没有复用机制,在图片多时内存占用就好大

gaohomway commented 6 years ago

我在尝试用此库浏览本地图片,有五千张图片,当我添加数据到500张左右时已经崩溃,我是取PHAsset全分辨率图像,也许是我使用方法不对...

我在尝试写一个类似的图片浏览库,思路是用UIScrollView作为浏览图主容器,始终维持三张图,当前显示页,以及左右隐藏页,所以即便五千张,始终维持三张的内存。

本不想重复发明轮子,你的库很强大,但是封装的有点过度,我很认真的在看,还是整理不透,比如扩展视频浏览,支持播放,以及扩展照片编辑功能,需要对你的代码做大量的改动,决定基于你的重新一份。

JiongXing commented 6 years ago

几百张图以上的情况,我确实没关注。崩溃的原因你有没找到?我也试着找找看。然后上面提到的视频播放,我还有点计划,至于照片编辑功能,我想已经超出这个库的范围,应在另外的地方实现。若有需要提供帮助的地方,我尽量有时间就想想看。

JiongXing commented 6 years ago

图片量大时候的崩溃,不是collectionView问题,是图片对象创建方法问题,应该是存在大量UIImage在内存中没有释放

gaohomway commented 6 years ago

@JiongXing 是的,是我使用错误的问题。 最近我在尝试重写图片浏览库,关于图片间距的问题和你分享一下,希望更新到此库里。

效果如下 Photo Browser Video

说明 仔细观察图与图直接无间距,而是多了一层白色视图,左右滑动时图片移出和移走由白色的视图决定,此效果和iPhone原生照片浏览效果相同。

整体布局采用UIScrollView,白色的间隔竖条是UIView,根据UIScrollViewDelegate中scrollViewDidScroll代理方法控制间隔条的位置,可以解决 图间空隙与边缘吸附 的问题,你就可以直接使用collectionView.isPagingEnabled = true来解决吸附的问题。

实现方式

    public func scrollViewDidScroll(_ scrollView: UIScrollView) {
        var x = scrollView.contentOffset.x
        var newX: CGFloat = 0
        let z = Int(x/boundW)
        x = x - CGFloat(z) * boundW
        if x <= 0 {
            x = 0
        }
        newX = (boundW - x) + (boundW - x) * 30 / boundW - 30
        spacingView.frame = CGRect(x: newX, y: 0, width: 30, height: boundH)
    }

优化 此库功能非常强大,代码优雅,只是感觉还有优化的空间,还可以整合不必要的方法,希望能有所调整。

JiongXing commented 6 years ago

感谢支持与建议,我稍后再细看下

JiongXing commented 6 years ago

您好,新版已完全重构,有空请更新到2.0看看~

gaohomway commented 6 years ago

好的,一定膜拜。 写了一个Android版的, Android有基础库支持,比swift简洁很多,需要可以看一下 PhotoBrowse

JiongXing commented 6 years ago

不错,赞