Невозможно контролировать, какие ячейки можно перетаскивать в UICollectionView. - PullRequest
0 голосов
/ 27 апреля 2019

Я очень новичок в iOS и пишу игру для iOS, которая требует перемещения данных между двумя UICollectionViews с помощью перетаскивания.Это работает в настоящее время, но есть две проблемы, которые я не знаю, как решить:

  1. Мне нужно удерживать ячейку в течение секунды или две, чтобы сделать ее перетаскиваемой.Я хотел бы, чтобы это было перетаскиваемым на ощупь, но добавление жеста в UICollectionViews не достигло этого.В приведенном ниже коде touchDrag - это UILongPressGestureRecognizer, добавляемое к UIViewController через раскадровку.

  2. У меня нет способа сделать некоторые ячейки не стираемыми.Некоторые клетки должны стать не стираемыми после того, как ход в игре пройден (или если клетка пуста, потому что она еще не использовалась).При чтении в Интернете мне может понадобиться реализовать метод canMoveItemAt, но, независимо от того, где я размещаю этот метод, он, похоже, не имеет никакого эффекта.Это потому, что я неправильно установил dragDelegate?

    @IBOutlet weak var collectionView: UICollectionView!
    @IBOutlet weak var collectionView2: UICollectionView!
    @IBOutlet weak var playerNameLabel: UILabel!
    @IBOutlet weak var playerScoreLabel: UILabel!
    @IBOutlet weak var oppNameLabel: UILabel!
    @IBOutlet weak var oppScoreLabel: UILabel!
    @IBOutlet weak var wordPlayLabel: UILabel!
    @IBOutlet weak var endGameLabel: UILabel!
    @IBOutlet weak var playButton: UIButton!
    @IBOutlet var touchDrag: UILongPressGestureRecognizer!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        //Setting drag and drop delegates and labels for names (think is isn't correct though.)
    
        playerNameLabel.text = "\(game.playerName):"
        oppNameLabel.text = "\(game.opponentName):"
    
    
        self.collectionView.dragInteractionEnabled = true
        self.collectionView.dragDelegate = self
        self.collectionView.dropDelegate = self
    
        self.collectionView2.dragInteractionEnabled = true
        self.collectionView2.dragDelegate = self
        self.collectionView2.dropDelegate = self
        self.collectionView2.reorderingCadence = .fast
    
        //Tried to add this gesture to make it so you don't have to hold to drag but it doesn't work.
    
        touchDrag.minimumPressDuration = 0.0
        collectionView.addGestureRecognizer(touchDrag)
        collectionView2.addGestureRecognizer(touchDrag)    
    
        //play button is disabled by default. Only enabled when a valid word is placed.
        playButton.isEnabled = false
        dataSource2 = game.playerDataSource2
    

    }

...