gpt4 book ai didi

ios - 如何使用多点触控一次选择多个 Collection View 单元格?

转载 作者:搜寻专家 更新时间:2023-10-30 21:53:05 24 4
gpt4 key购买 nike

我正在编写一个 iOS 纸牌游戏。我在 Collection View 中显示玩家的卡片。玩家可以通过点击来选择一张或多张牌,然后按下发牌按钮来发牌。

我想允许用户使用多根手指一次选择多张卡片。例如,如果用户要选择2张卡片,他只需要用两个手指同时点击两张卡片,它们就会被选中。似乎默认情况下,UICollectionView 不允许这样做。当我用 2 根手指点击时,即使 UIView 中的 isMultipleTouchEnabled 属性已设置为 true,也只会选择其中一张卡片。

请注意,我不是在询问如何允许用户在 Collection View 中选择多个项目。我可以并且已经使用 allowsMultipleSelection = true 做到了这一点。我要问的是如何让用户用 2 个手指选择 2 个单元格(或用 n 个手指选择 n 个单元格)。

我找到了这个 question ,但这似乎是关于如何在单元格被选中时显示其周围的边框。

我还查看了 UICollectionView 的文档,但没有发现控制它的属性。

最佳答案

首先让我们准确了解问题所在。 collectionView 附有一堆 UIGestureRecognisers(用于平移、触摸、缩放等)。每个识别器都有相同的状态机 possible->recognised->changed->ended/failed。每个识别器都有一个明确的开始和结束。一旦点击手势在一个位置开始,它就不会在另一个位置开始。当一个人 1) touch down point A 2) touch down point B 3) touch up point A 4) touch up point B 手势完全忽略了 B 点,因为它“聚焦”在 A 点上。

第二个问题是,如果您同时触摸两个点,tapGesture.location(in: view) 方法将为您提供这两个位置的平均值。

但是我们解决这个问题的第一步是禁用 collectionView tapGesture - 它没有做我们想要的事情:

  self.collectionView.allowsMultipleSelection = true
self.collectionView.allowsSelection = false;

接下来,我们将分别向每个单元格添加我们自己的点击手势。这不是苹果明确推荐的(“你应该始终将你的手势识别器附加到 Collection View 本身——而不是特定的单元格或 View 。”1)但它会起作用:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
...
cell.addGestureRecognizer(UITapGestureRecognizer.init(target: self, action: #selector(didTap(tapper:))))
...
return cell;
}

@objc func didTap(tapper:UIGestureRecognizer) {
if let cell = tapper.view as? UICollectionViewCell{
if let index = collectionView.indexPath(for: cell) {
if collectionView.indexPathsForSelectedItems?.contains(index) ?? false {
collectionView.deselectItem(at: index, animated: true)
cell.isSelected = false
}else{
collectionView.selectItem(at: index, animated: true, scrollPosition: [])
cell.isSelected = true
}
}
}
}

关于ios - 如何使用多点触控一次选择多个 Collection View 单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54379314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com