Я пытаюсь реплицировать салфетки для удаления функции, как в почтовом представлении таблицы. Только на этот раз мне нужно собрать его в виде коллекции, но мне немного тяжело. Это горизонтальный список прокрутки с удалением, чтобы удалить. У меня уже есть прокрутка вверх, но мне сложно определить, как мне нужно настроить салфетки, чтобы удалить/коснуться, чтобы удалить или проигнорировать функциональность.Проведите по удалению в CollectionView
Это выглядит следующим образом:
Поэтому я использую следующую CollectionView:
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
}
Мой заказ videocell содержит одно изображение и ниже есть кнопка удаления. Поэтому, если вы пролистаете изображение, появляется кнопка удаления. Не уверен, если это правильный способ, как это сделать:
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")
}
}
И я использую следующую логику:
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.
}
}
Но проблема начинается там. Как только моя ячейка находится за пределами границ коллекции, я больше не могу ее получить. Я все еще хочу провести его дальше, чтобы удалить его. Я могу сделать это только, щелкнув по кнопке удаления, но я хочу, чтобы Imageview над ним также был прокручиваем. Или, если я коснусь изображения вне коллекции, он должен вернуться в строку и не удалить его.
Если я увеличиваю границы коллекции, я могу предотвратить эту проблему, но я также могу прокрутить, чтобы удалить внешнюю видимую высоту ячейки. Это вызвано ссылкой tapLocation, которая находится внутри коллекции и обнаруживает indexPath. Что-то, чего я не хочу. Я хочу, чтобы проведите по экрану только для работы с ячейкой коллекции.
Также кнопка и изображение мешают друг другу, потому что я не могу их отличить. Они оба находятся в одной и той же ячейке, поэтому мне интересно, есть ли у меня кнопка удаления в ячейке вообще. Или где я должен разместить его иначе? Я мог бы также сделать из него две кнопки и отключить взаимодействие пользователя в зависимости от состояния, но не уверен, как это закончится.
Я, конечно, заинтересован в вашем решении. Не могли бы вы обновить версию до github, потому что в настоящее время я получаю пустой проект! – Wouter125
О, да, конечно, это ошибка, смущающая. Он обновлен сейчас! – Imbue
Работает как очарование. Именно то, что я искал. Уже переписал его для моего pangesture, но я действительно искал, как увеличить площадь ячеек :) – Wouter125