제스처를 처음 사용하고 있습니다. 제 접근법이 잘못되었거나 더 나은 해결책이 있다면 알려주십시오.콜렉션 뷰 재설정 탭 동작시 셀 위치
스 와이프 할 때 collectionView 셀을 삭제하려고합니다. UITableview 삭제 기능과 마찬가지로 왼쪽으로 이동합니다. 삭제가 정상적으로 작동합니다. 내가있는 viewDidLoad 및 이 코드 업데이트를 시도/사용하고
(동일있는 tableview 같은 행 삭제 기능) 셀을 슬쩍하고 다시 원래의 위치로 슬쩍해야 COllectionView의 아무 곳이나 탭하면 이제 내가 원하는이며, 나는 self.collectionView.performBatchUpdates하지만하지 부드러운 애니메이션으로 다시 원래 셀의 위치를 설정 할 수 있어요 그래서 여기에 이벤트
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(tapped(_:)))
self.view.addGestureRecognizer(tap)
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let Cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath) as! CustomCell
Cell.backgroundColor = UIColor.white
let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(delete(sender:)))
leftSwipe.direction = UISwipeGestureRecognizerDirection.left
Cell.addGestureRecognizer(leftSwipe)
let tap = UITapGestureRecognizer(target: self, action: #selector(tapped(_:)))
Cell.addGestureRecognizer(tap)
Cell.deleteButton.addTarget(self, action: #selector(DeleteCell(sender:)), for: .touchUpInside)
}
func tapped(_ recognizer: UITapGestureRecognizer) {
// self.collectionView.performBatchUpdates({
//self.collectionView.reloadSections(NSIndexSet(index: 0) as IndexSet)
//}, completion: nil)
let point = recognizer.location(in: collectionView)
let indexPath = collectionView.indexPathForItem(at: point)
let cell = self.collectionView.cellForItem(at: indexPath!)
UIView.animate(withDuration: 0.4) {
cell?.contentView.frame = CGRect(x: 0, y: 0, width: (cell?.contentView.frame.width)!, height: (cell?.contentView.frame.height)!)
}
}
func delete(sender: UISwipeGestureRecognizer){
let cell = sender.view as! CustomCell
UIView.animate(withDuration: 0.4) {
cell.contentView.frame = CGRect(x: -90, y: 0, width: cell.contentView.frame.width, height: cell.contentView.frame.height)
}
}
func DeleteCell(sender : AnyObject){
let cell = sender.superview as! CustomCell
let i = self.collectionView.indexPath(for: cell)!.item
let indexpath = self.collectionView.indexPath(for: cell)
let array : NSMutableArray = []
self.collectionView.performBatchUpdates({
self.userArray.remove(at: i)
array.add(indexpath!)
self.collectionView.deleteItems(at:array as! [IndexPath])
}, completion: nil)
}
class CustomCell: UICollectionViewCell {
let deleteButton: UIButton = {
let deleteBtn = UIButton()
deleteBtn.setImage(UIImage(named: "red"), for: .normal)
deleteBtn.contentMode = .scaleAspectFit
return deleteBtn
}()
}
을 도청. 사용하려고 시도했습니다. 다른 셀이나 다른 셀이 아닌 다른 셀을 스 와이프 한 셀만 스 와이프 한 경우에만 작동합니다. 어떤 제안이 도움이 될 것입니다 !!
감사합니다 jacolack! 나는 그것을 시도하고 동일하다. 선택한 셀을 탭한 경우에만 셀이 돌아갑니다. – iUser
어느 클래스에 추가 하시겠습니까? – Jacolack
안녕하세요. 죄송하지만 어떤 수업을 듣지 않으셨습니까? 위의 코드를 업데이트했습니다. 좀 봐주세요. – iUser