如何在UICollectionView中绘制一条线?

问题描述:

我想让用户用一个手势选择多个单元格,如果选定的单元格组成一个正确的单词,它将由一个永久绘制线表示,否则该线将消失。如何在UICollectionView中绘制一条线?

检查这个形象的例子:

和视频:https://youtu.be/wzuCo6q8xDY

我的第一个方法是使用一个UIPanGestureRecognizer ......但它只返回最后选定单元格..

如何在CollectionView中绘制一条线并确定绘制线后面的单元格?

我一整天都在想这个问题,想知道是否有人有办法解决这个问题。

我是帮助每一个微小的一点感激,谢谢:)

+0

因为我*不*认为*就是*一个UICollectionView。至少,我认为在它检测触摸之前有一个清晰的背景UIView。也许更多的逻辑,但(1),这不是一个“线”,和(2)你如何做一个阿尔法减少的触摸平移*不*改变每个单元格的背景颜色 - 换句话说,一个CGRect - 看起来像那样。 – dfd

+0

为什么你为此使用集合视图?你会如何区分滚动和选择? –

最简单的方法来完成,这将是使用UIPanGestureRecognizer到您的收藏观。

collectionView.gestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(handlePan(gesture:)))) 

的handlePan(手势:)方法是这样的:

func handlePan(gesture: UIPanGestureRecognizer){ 
    let indexPath = collectionView.indexPathForItem(at: gesture.location(in: collectionView)) 

    if let index = indexPath { 

     collectionView.selectItem(at: index, animated: true, scrollPosition: UICollectionViewScrollPosition()) 

    } 

} 

不要忘记让你的CollectionView多重选择:

collectionView.allowsMultipleSelection = true

你也可以重写您的UICollectionViewCell中的isSelect属性:

class CustomCell: UICollectionViewCell { 

    override var isSelected: Bool { 
     didSet { 
      if isSelected { 
       backgroundColor = .green 
      } else { 
       backgroundColor = .blue 
      } 
     } 
    } 

} 

在这种情况下,我只修改背景,但可以根据需要进行修改。