2017-04-06 2 views
1

Ich möchte den Benutzer mehrere Zellen mit einer einzigen Geste auswählen lassen, und wenn die ausgewählten Zellen ein korrektes Wort bilden, wird es durch eine permanente gezogene Linie dargestellt, andernfalls wird die Linie verschwinden.Wie kann ich eine Zeile in einer UICollectionView zeichnen?

prüfen dieses Bild Beispiel:

und Video: https://youtu.be/wzuCo6q8xDY

Mein erster Ansatz eine UIPanGestureRecognizer zu verwenden war ... aber es kehrt nur die letzte ausgewählte Zelle ..

Wie kann ich eine Linie innerhalb einer CollectionView zeichnen und ermitteln, welche Zellen hinter der gezeichneten Linie sind?

Ich habe den ganzen Tag über dieses Problem nachgedacht und fragte mich, ob jemand einen Ansatz hat, um das zu lösen.

Ich bin für jeden winzig bisschen Hilfe dankbar, danke

+0

Ich habe gewählt, weil ich * glaube * das ist * nur * eine UICollectionView. Zumindest denke ich, dass es einen klaren Hintergrund gibt, der Berührungen erkennt. Wahrscheinlich auch viel mehr Logik, aber (1) das ist keine "Linie", und (2) wie machst du eine Alpha-verminderte Touch-Pan * nicht * ändere die backgroundColor von jeder Zelle - mit anderen Worten, ein CGRect - Sieht danach aus. – dfd

+0

Warum verwenden Sie eine Sammlungsansicht dafür? Wie würden Sie zwischen Scrollen und Auswählen unterscheiden? –

Antwort

1

Die einfachste Art und Weise zu erreichen :) das wäre mit UIPanGestureRecognizer zu Ihrer Sammlung Ansicht sein.

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

Die handlePan (Geste :) Methode würde so aussehen:

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()) 

    } 

} 

Vergessen Sie nicht, eine Mehrfachauswahl in der Collection zu ermöglichen:

collectionView.allowsMultipleSelection = true

Sie können auch überschreiben Sie die isSelect-Eigenschaft in Ihrer UICollectionViewCell:

class CustomCell: UICollectionViewCell { 

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

} 

In diesem Fall bin ich nur den Hintergrund ändern, aber Sie können ändern, was Sie brauchen.

Verwandte Themen