Swift滑动视图

Jod*_*ner 4 uiview ios swift

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

应用商店预览

到目前为止,我真正发现的是这篇中篇文章:iOS Swift:Swipe View.但是我不确定这是否是我上面要求的正确方法,而且我也不知道如何让下一张/上一张卡片保持在每次滑动的边缘.

有没有人有任何实现这个的提示?

Kee*_*nle 9

最简单的方法是使用UICollectionViewUICollectionViewFlowLayout. UICollectionViewFlowLayout开箱即用,非常强大.

基本上你需要:

  1. 添加UICollectionView到视图控制器.
  2. 默认情况下,UICollectionView去与Flow选定的布局.
  3. 配置 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>) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

...最后提示:在视图控制器的代码中使集合视图减速看起来很快:

self.collectionView?.decelerationRate = UIScrollViewDecelerationRateFast
Run Code Online (Sandbox Code Playgroud)

寻呼指标:

在您提供的示例中,有一个分页控件可以反映当前项目和整体项目计数.你需要UIPageControll手动添加; 你可以在故事板中做到这一点.更新页面控制状态的最佳位置是:

// method in UICollectionView delegate that you need to define.
// update your paging info in method bellow.
override func scrollViewDidScroll(scrollView: UIScrollView) {
    ...    
}
Run Code Online (Sandbox Code Playgroud)

备注:

处理我列出的滚动视图的方法是由UICollectionViewDelegatefrom 继承的UIScrollViewDelegate.UICollectionView本身源于UIScrollViewDelegate.