【发布时间】:2017-02-15 10:34:21
【问题描述】:
所以我有一个卡片的集合视图,我想要的是当我向左滑动时,我希望下一个项目居中,this doesn't work with paging enabled
所以当我向左滑动时,我希望下一张卡片居中,这不适用于正常行为,因为我只想刷一张卡片。
所以我添加了UISwipeGestureRecognizer 和disabled scrolling on the collection view
类 ViewController: UIViewController,UICollectionViewDataSource {
@IBOutlet var joke_cards: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad();
//Add gestures
let leftSwipeGest = UISwipeGestureRecognizer(target: self, action: #selector(funcForGesture))
leftSwipeGest.direction = .left
joke_cards.addGestureRecognizer(leftSwipeGest)
}
func funcForGesture(sender: UISwipeGestureRecognizer){
if sender.direction == .left {
//scroll to next item
}
}
现在我的问题是如何滚动到下一个项目?因为我不知道 indexPath?因为如果我想使用这个self.joke_cards.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true),我需要索引路径,所以我想我需要弄清楚视图上的当前indexPath和用户滑动时的add one。
有什么建议吗?
//更新 所以我设法让它工作,但它只在我第一次刷卡时有效:
func funcForGesture(sender: UISwipeGestureRecognizer){
if sender.direction == .left {
//scroll to next item
let cellItems = self.joke_cards.indexPathsForVisibleItems
let next = cellItems[0] as! IndexPath
self.joke_cards.scrollToItem(at: next, at: .centeredHorizontally, animated: true)
}
}
【问题讨论】:
-
你的卡是什么?一个collectionview单元或??
-
是的,每张卡片都是一个collectionview单元
-
所以你可以根据你的数组值使用 self.joke_cards.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
-
按照以下答案中的第一个解决方案