Swift滑动视图

时间:2014-09-07 16:01:00

标签: ios uiview swift

我是Swift和iOS开发的新手,我正在设置一系列视图或“卡片”,可以左右滑动,下一张/上一张卡片留在边缘以表示他们在那里。这是在iOS App Store预览中完成的:

App store preview

到目前为止,我真正找到的就是这篇中篇文章:iOS Swift: Swipe View。但是我不确定这是否是正确的方式来做我上面提到的问题,而且我也不知道如何让下一张/前一张卡片保持在每次滑动的边缘。

有没有人有任何实现此目的的提示?

1 个答案:

答案 0 :(得分:9)

最简单的方法是使用UICollectionViewUICollectionViewFlowLayoutUICollectionViewFlowLayout开箱即用,非常强大。

基本上你需要:

  1. UICollectionView添加到视图控制器。
  2. 默认情况下UICollectionView选择Flow布局。
  3. 配置UICollectionViewFlowLayout
    • 将滚动方向设置为水平
    • 定义项目大小和间距。请记住,您只需要一个项目就可以完全看到;此外,左侧和右侧的空间也应该是可见的;你需要更多地展示上一张和下一张卡片,所以一些基本的数学等着你:)。一个小技巧可以使你的第一张和最后一张牌正确居中:你应该指定垂直部分插入等于前一张牌的可见宽度加上牌之间的空间之和。
  4. 上面的步骤应该足以具有垂直可滚动的卡片视图。但它看起来不会很棒!为了使它变得更好,您可能需要在用户结束滚动后完美地居中最合适的卡片。 要实现粘性滚动,您需要使用以下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的{​​{1}}继承。 UIScrollViewDelegate本身来自UICollectionView