Swift CollectionView设置滚动的位置

时间:2017-02-08 21:50:04

标签: ios swift collections

所以我有一个水平的集合视图,我希望当用户滚动设置我想要的滚动时。

@IBOutlet var joke_cards: UICollectionView!

extension ViewController: UIScrollViewDelegate{

    func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

        joke_cards.contentOffset.x = scrollView.contentOffset.x + 1000
        joke_cards.reloadData()

    }

}

但这不起作用,它滚动正常,我想指定滚动多少,任何建议?

所以我认为我需要更清楚一点,我想要的是水平翻转一些卡片,这就是当用户喜欢滑动以显示中间的下一个单元格时我需要的原因

1 个答案:

答案 0 :(得分:1)

如果要手动将用户滚动到某个区域,首先需要定义滚动到视图所需的区域。这将取决于您尝试滚动的确切位置,但如果目标只是向右滚动1000个点,您可以定义矩形并滚动,如下所示:

let destinationRect = CGRect(x: scrollView.contentOffset.x + 1000, y: scrollView.contentOffset.y, width: 1, height: 1)
scrollView.scrollRectToVisible(destinationRect, animated: true)

请注意,只要矩形的任何部分可见,滚动就会停止,因此如果您希望contentOffset.x + 1000位于中心,则需要进行更多数学运算才能创建destinationRect

另一个选项,因为你正在使用UICollectionView是要找出你要滚动到哪个单元格,并将该单元格滚动到某个位置。在这个例子中,我安全地在你指定的点打开可选的indexPath,并在collectionView中滚动该单元格水平居中:

if let indexPath = self.joke_cards.indexPathForItem(at: CGPoint(x: scrollView.contentOffset.x, y: scrollView.frame.midY)) {
    self.joke_cards.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
}