测试已测试 | ✗ |
选择语言 | Obj-CObjective C |
许可 | MIT |
发布上一个发布 | 2014年12月 |
由Jonathan Crooke维护。
便携代理 UICollectionViewDataSource
和 UICollectionViewDelegate
,用于创建具有页面预览的功能性无限水平滚动轮播效果。
水平滚动轮播是现代移动用户界面中非常优雅和用户友好的组件 - 请参见 Facebook for iOS 广告 (叹息) 轮播作为商业案例。这个“无限”环绕的特性使得组件更吸引人,因为它不需要用户翻到最前面;他们只需翻过最后一项。
实现这一点的旧方法是通过使用具有三个或更多页面的 UIScrollView
并操作滚动视图的 contentOffset
来创建无限滚动错觉。这个方法当然是有效的,有一些开源实现可供尝试。 1,2 等。
这个方法的缺点是你实际上是在重新实现 iOS5 的秘密小奇迹,即 UICollectionView
的很多功能。
首先,UICollectionView
正好是为了这种 类型的 组件而设计的。对于无限滚动特性,为了实现这种效果,不需要对集合的数据源进行太多操作。然而,问题是具有预览功能的下一页/上一页。当集合中的单元格超出边界时,UICollectionView
会将其删除,因此我们不能使用带有 clipsToBounds
设置为 NO
的集合窄边框技术。这多么不幸!
UICollectionView
是这么一件棒(第一方)的工具,最好是绕过这些问题,而不是退回到 pre-UICollectionView
UIScrollView
方法层面。为了便携地实现这一功能,我创建了这个库。
在这个实现中,我们通过创建一个人为地 宽 的主要数据源,营造出无限循环的错觉。我们将集合数据源中的 真实 项目数量乘以一个大常数。这意味着用户可以滚动到任一端,但安全地假设大多数人会将时间花在他们的日常工作中,而不是尝试达到这个效果。无论如何,这也是苹果(WWDC 2012 的 scrollviews)提出的方法。
页面预览稍微有些挑战,因为我们不能插入集合视图的边框。此外,由于我们无法让集合默认的分页实现适用于除集合边框宽度之外的任何宽度,因此它变得不合适。相反,我们可以设置适当的左 sectionInset
,然后使用 UIScrollViewDelegate
的 -scrollViewWillEndDragging:withVelocity:targetContentOffset:
方法自己重新创建分页效果。
这一切归结为需要代理集合的数据源和代理以实现所需的效果。
-scrollViewWillEndDragging:withVelocity:targetContentOffset:
中的常数,以更好地匹配 UIScrollView
的原生分页。