所以我有一张卡片的集合视图,我想要的是当我向左滑动时我希望下一个项目位于中间,document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
try {
var uuid = device.uuid;
alert(uuid);
} catch (e) {
alert(e);
}
}
因此,当我向左滑动时,我希望下一张卡片居中,这不符合正常行为,因为我只想刷一张卡片。
所以我添加了this doesn't work with paging enabled
和UISwipeGestureRecognizer
类ViewController:UIViewController,UICollectionViewDataSource {
disabled scrolling on the collection view
现在我的问题是如何滚动到下一个项目?既然我不知道indexPath?因为如果我想使用这个@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)
。
有什么建议吗?
//更新 所以我设法让它工作,但只有在我第一次刷卡时才有效:
add one
答案 0 :(得分:1)
一个解决方案:
1:向您的单元格添加NSIndexPath
属性,只需将indexPath设置为cellForItem
方法中的属性。
3:Get the rect of the visible单元格并计算它们在屏幕上的位置,您也可以从单元格属性中获取正确的indexPath。
第二个解决方案:
1:在您的手机内容视图中添加UILongPressGestureRecognizer
2:将minimumPressDuration设为0。
3:添加委托方法以激活激活or this.
第三个解决方案:
1:保持滑动手势。
答案 1 :(得分:0)
为什么你说这不适用于启用分页?在我看来,这实际上应该是最好的方法。您可以将UICollectionViewCells
的宽度设置为等于UICollectionView
的宽度,将滚动方向设置为水平并启用分页,这应该可以解决问题。
通过这种方式,您不会需要任何UIGestureRecognizers
。
答案 2 :(得分:0)
好的解决方案就是这个:
@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
let cellItems = self.joke_cards.indexPathsForVisibleItems
self.joke_cards.scrollToItem(at: cellItems.max()!, at: .centeredHorizontally, animated: true)
}
}