所以我有一个水平的集合视图,我希望当用户滚动设置我想要的滚动时。
@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()
}
}
但这不起作用,它滚动正常,我想指定滚动多少,任何建议?
所以我认为我需要更清楚一点,我想要的是水平翻转一些卡片,这就是当用户喜欢滑动以显示中间的下一个单元格时我需要的原因
答案 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)
}