Представление коллекции с пользовательскими метками при перетаскивании для Swift - PullRequest
0 голосов
/ 10 октября 2019

Я добавил пользовательские метки в swift, когда я выполняю перетаскивание, содержимое меток смешивается. Я добавил скриншот и мой текущий код, так как я могу решить это событие перетаскивания? Я пробовал без пользовательских ярлыков, это работает, но когда я переключаюсь на пользовательские ярлыки, он застрял. При окончательном проектировании каждый из ярлыков преобразуется в блоки, и каждый блок будет представлять разные данные. И пользователь будет выполнять эти события перетаскивания и манипулировать их макетом.

    import UIKit

    class ViewController: UIViewController {

        var cellIds = ["1","2","3"]

            @IBOutlet weak var collectionView: UICollectionView!
          fileprivate var longPressGesture =  UILongPressGestureRecognizer();

        let cellSizes = [
            CGSize(width:190, height:200),
             CGSize(width:190, height:200),
              CGSize(width:190, height:200),

        ]

        @objc func longTap(_ gesture: UIGestureRecognizer){

            switch(gesture.state) {
            case .began:
                guard let selectedIndexPath = collectionView.indexPathForItem(at: gesture.location(in: collectionView)) else {
                    return
                }
                collectionView.beginInteractiveMovementForItem(at: selectedIndexPath)
            case .changed:
                collectionView.updateInteractiveMovementTargetPosition(gesture.location(in: gesture.view!))
            case .ended:
                collectionView.endInteractiveMovement()
                //doneBtn.isHidden = false
                //longPressedEnabled = true
                self.collectionView.reloadData()
            default:
                collectionView.cancelInteractiveMovement()
            }
        }

        override func viewDidLoad() {
            super.viewDidLoad()


            longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(self.longTap(_:)))
            collectionView.addGestureRecognizer(longPressGesture)


            collectionView!.register(UICustomCollectionViewCell.self, forCellWithReuseIdentifier: "MenuCell")

            self.automaticallyAdjustsScrollViewInsets = false
        }

        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
            //top, left, bottom, right
            return UIEdgeInsets(top: 130, left: 1, bottom: 0, right: 10)
        }

    }

    extension ViewController: UICollectionViewDelegate {
        func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
           // print("User tapped on \(cellIds[indexPath.row])")
        }

        func collectionView(_ collectionView: UICollectionView, canMoveItemAt indexPath: IndexPath) -> Bool {
            return true
        }


         func userDidEndDragging(_ cell: UICollectionViewCell?) {


         }




        func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
            let item = cellIds.remove(at: sourceIndexPath.item)
            cellIds.insert(item, at: destinationIndexPath.item)
            print(cellIds);
        }
     }



    extension ViewController: UICollectionViewDataSource {
        func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return cellIds.count
        }

        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MenuCell", for: indexPath) as? UICustomCollectionViewCell

            cell!.layer.cornerRadius=10
            cell!.layer.masksToBounds=true

             var id = cellIds[indexPath.row];

            if (id == "1")
            {

              cell?.lblTest1.text = "amsterdam";
                cell?.lblTest1.tag = 100
            }
            if (id == "2")
            {
                  cell?.lblTest2.text = "madrid";
                  cell?.lblTest2.tag = 101

            }

            if (id == "3")
            {
                 cell?.lblTest3.text = "istanbul";
                 cell?.lblTest3.tag = 102
            }

            return cell ?? UICollectionViewCell()

         }
    }

    extension ViewController: UICollectionViewDelegateFlowLayout {
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
            return cellSizes[indexPath.item]
        }
    }

import UIKit
class UICustomCollectionViewCell: UICollectionViewCell {

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

override func prepareForReuse() {
    super.prepareForReuse()
}

override init(frame: CGRect) {
    super.init(frame: frame)
       self.addSubview(lblTest1)
      self.addSubview(lblTest2)
      self.addSubview(lblTest3)
}

var lblTest1:UILabel = {
    let label1 = UILabel(frame: CGRect(x:10, y: 20, width: 90 , height: 40))
    label1.lineBreakMode = .byWordWrapping
    label1.numberOfLines = 0
    label1.tag = 100;
    label1.tintColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
    return label1
}()


var lblTest2:UILabel = {
    let label2 = UILabel(frame: CGRect(x:10, y: 20, width: 90 , height: 40))
    label2.lineBreakMode = .byWordWrapping
    label2.numberOfLines = 0
    label2.tag = 101;
    label2.tintColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
    return label2
}()


var lblTest3:UILabel = {
    let label3 = UILabel(frame: CGRect(x:10, y: 20, width: 90 , height: 40))
    label3.lineBreakMode = .byWordWrapping
    label3.numberOfLines = 0
    label3.tag = 102;
    label3.tintColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
    return label3
}()

override func layoutSubviews() {
    super.layoutSubviews()
}
}

Screenshot

...