在单个滚动视图中放置多个UICollectionView单元格

时间:2015-11-11 08:46:25

标签: ios objective-c uicollectionview uicollectionviewcell uicollectionviewlayout

问题

我正在研究创建杂志阅读器视图的问题。根据视图的宽高比,该杂志可以一次读取1页,或者可以看到2页展开。

页面需要缩放和平移(如在照片应用中查看单张照片时),重要,在2页模式下,2页需要缩放/好像它们作为单一视图被连接在中间。

当前(不满意)解决方案

我的第一个(并且在生产中)实现它的想法是作为UICollectionView,因为这提供了可重用单元和多个UICollectionViewLayouts的灵活性(例如,网格页面概述)。

我将每个2页展开视为包含UIScrollView的单元格,而UIScrollView又包含2个单页面视图。然后,我根据singlePageMode标志执行从spread indexPaths到单页索引的大量映射。

传播< - >页面的整个映射最终变得非常不灵活。例如,我希望添加一个网格视图布局,可以很容易地转换为/从,我也希望一个很好的页面显示'在单页/双页模式之间切换时当前页面上的动画。但是,当切换singlePageMode标志时,我必须在collectionView上有效地重新加载数据,并且可能管理大量单元格移动/删除/插入,以便将当前可见页面保持在视图中。

想到的一种可能性是使collectionView将单个页面视为单元格,并跳过整个page spread概念。这对我来说更令人满意,因为每个页面的位置可以完全由自定义布局对象控制。但是,我对这个解决方案的挂断是2页传播的平移/缩放。

我想我可以在布局对象中使用手势识别器来模拟scrollview行为,但是我不认为这会产生很好的动力滚动你得到一个滚动视图,并且将是一个主要的,我认为可能是脆弱的,黑客。

所以,我的问题的真正关键是:如何同时缩放/平移2个单元格的内容,就像它们在同一个scrollView中一样。

或者,如果有人能解决更广泛的问题,我很乐意听到它。

如果有兴趣,可以在此处获取当前的实施:https://github.com/shopgun/verso

它演变得很糟糕,并且(正如你可能看到的那样)需要一个重要的重构和关注点分离,因此上面的问题。

0 个答案:

没有答案