最简单的方法是使用UICollectionView 和UICollectionViewFlowLayout。
UICollectionViewFlowLayout 是开箱即用的,非常强大。
基本上你需要:
- 将
UICollectionView 添加到您的视图控制器。
- 默认情况下,
UICollectionView 会选择 Flow 布局。
- 配置
UICollectionViewFlowLayout
- 将滚动方向设置为水平
- 定义项目大小和间距。请记住,您只需要一项即可完全可见;此外,左右两侧的空格也应该是可见的;此外,您还需要显示上一张和下一张牌,所以一些基本的数学等着您:)。让您的第一张和最后一张卡片正确居中的一个小技巧:您应该指定垂直剖面插图等于前一张卡片的可见宽度加上卡片之间的空间之和。
上面的步骤应该足以让卡片视图垂直滚动。但它看起来不会很好!为了使它变得更好,您可能需要在用户端滚动后完美地居中最合适的卡片。 要实现粘性滚动,您需要使用以下UICollectionViewDelegate 方法:
// compute collection view content offset in method bellow
override func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
...
}
// compute targetContentOffset in method bellow
override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
...
}
...最后一个提示:让集合视图减速在视图控制器的代码中看起来很快:
self.collectionView?.decelerationRate = UIScrollViewDecelerationRateFast
分页指示器:
在您提供的示例中,有一个分页控件反映当前项目和总项目数。您需要手动添加UIPageControll;你可以在故事板中做到这一点。更新页面控件状态的最佳位置是:
// method in UICollectionView delegate that you need to define.
// update your paging info in method bellow.
override func scrollViewDidScroll(scrollView: UIScrollView) {
...
}
备注:
我列出的处理滚动视图的方法由UICollectionViewDelegate 从UIScrollViewDelegate 继承。 UICollectionView 本身派生自 UIScrollViewDelegate。