Ich versuche, die Swipe zu löschen Funktion wie in der Mail-Tabellenansicht zu replizieren. Nur dieses Mal muss ich es auf einer CollectionView aufbauen, aber ich habe eine harte Zeit. Es ist eine horizontale Scroll-Liste mit einem Wischen nach oben zum Löschen. Ich habe bereits die Wischfunktion, aber es ist schwer herauszufinden, wie ich den Swipe zum Löschen/Antippen einrichten muss, um Funktionen zu löschen oder zu ignorieren.Swipe zum Löschen auf CollectionView
Also ich bin mit dem folgenden Kollektion:
func buildCollectionView() {
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
layout.minimumInteritemSpacing = 0;
layout.minimumLineSpacing = 4;
collectionView = UICollectionView(frame: CGRect(x: 0, y: screenSize.midY - 120, width: screenSize.width, height: 180), collectionViewLayout: layout)
collectionView.dataSource = self
collectionView.delegate = self
collectionView.register(VideoCell.self, forCellWithReuseIdentifier: "videoCell")
collectionView.showsHorizontalScrollIndicator = false
collectionView.showsVerticalScrollIndicator = false
collectionView.contentInset = UIEdgeInsetsMake(0, 20, 0, 30)
collectionView.backgroundColor = UIColor.white()
collectionView.alpha = 0.0
//can swipe cells outside collectionview region
collectionView.layer.masksToBounds = false
swipeUpRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.deleteCell))
swipeUpRecognizer.delegate = self
collectionView.addGestureRecognizer(swipeUpRecognizer)
collectionView.isUserInteractionEnabled = true
}
Meine benutzerdefinierte videocell ein Bild enthält, und darunter gibt es die Schaltfläche Löschen. Wenn Sie also das Bild nach oben streichen, erscheint die Löschtaste. Nicht sicher, ob dies der richtige Weg ist, wie man es tun:
class VideoCell : UICollectionViewCell {
var deleteView: UIButton!
var imageView: UIImageView!
override init(frame: CGRect) {
super.init(frame: frame)
deleteView = UIButton(frame: CGRect(x: 0, y: 0, width: frame.size.width, height: frame.size.height))
deleteView.contentMode = UIViewContentMode.scaleAspectFit
contentView.addSubview(deleteView)
imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: frame.size.width, height: frame.size.height))
imageView.contentMode = UIViewContentMode.scaleAspectFit
contentView.addSubview(imageView)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Und ich verwende die folgende Logik:
func deleteCell(sender: UIPanGestureRecognizer) {
let tapLocation = sender.location(in: self.collectionView)
let indexPath = self.collectionView.indexPathForItem(at: tapLocation)
if velocity.y < 0 {
//detect if there is a swipe up and detect it's distance. If the distance is far enough we snap the cells Imageview to the top otherwise we drop it back down. This works fine already.
}
}
Aber das Problem beginnt dort. Sobald meine Zelle außerhalb der Collectview-Grenzen ist, kann ich nicht mehr darauf zugreifen. Ich möchte es noch weiter wischen, um es zu entfernen. Ich kann das nur tun, indem ich auf die Schaltfläche "Löschen" wische, aber ich möchte, dass die Bildansicht darüber auch wischbar ist. Oder wenn ich auf das Bild außerhalb der Sammlungsansicht tippe, sollte es in die Zeile zurückgleiten und es nicht löschen.
Wenn ich die Collectview-Grenzen erhöhen, kann ich dieses Problem verhindern, aber ich kann auch wischen, um außerhalb der sichtbaren Höhe der Zelle zu entfernen. Dies wird durch die tapLocation verursacht, die sich in der Sammlungsansicht befindet und einen Indexpfad erkennt. Etwas, das ich nicht will. Ich möchte das Wischen nur in einer Collectionview Zelle arbeiten.
Auch der Knopf und das Bild stören sich gegenseitig, weil ich sie nicht unterscheiden kann. Sie sind beide in der gleichen Zelle, deshalb frage ich mich, ob ich überhaupt den Lösch-Knopf in der Zelle haben sollte. Oder wo sollte ich es sonst platzieren? Ich könnte auch zwei Tasten daraus machen und die Benutzerinteraktion je nach Status deaktivieren, aber nicht sicher, wie das enden würde.
Ich bin sicherlich an Ihrer Lösung interessiert. Könntest du eine aktualisierte Version nach Github schieben, weil ich momentan nur ein leeres Projekt bekomme? – Wouter125
Oh ja sicher, das ist ein Fehler, peinlich. Es ist jetzt aktualisiert! – Imbue
Funktioniert wie ein Charme. War genau das, wonach ich suchte. Habe es bereits für meine Pangeschreibung neu geschrieben, aber in der Tat habe ich versucht, den Zellbereich zu vergrößern :) – Wouter125