Как разрешить одновременное касание только одного UIImageView - PullRequest
0 голосов
/ 23 сентября 2018

Я создал простую игру на память, которая состоит из 16 UIImageViews.
board with no flipped cards

Для игры на память вы должны иметь возможность касаться только одной карты за раз.Когда вы дотрагиваетесь до карты, она переворачивается и показывает изображение под

board with one flipped card

Моя проблема заключается в том, что я хочу, чтобы пользователь мог касаться только одного изображения за раз.Когда пользователь нажимает на две карты одновременно, это приводит к сбоям в игре.Поэтому мой вопрос заключается в том, как мне разрешить одновременно выполнять только 1 UIImageView, и не позволять нескольким UIImageView выполнять действие одновременно, если к ним прикасаться одновременно.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Предполагая, что пользователь должен отсоединить карту, выбрав ее снова, я бы предложил добавить свойство в ваш viewController, чтобы отслеживать selectedCard.Если выбранная карта уже есть, игнорируйте все остальные.

var selectedCard: UIImageView?

@objc func handleTap(_ recognizer: UITapGestureRecognizer) {
    guard let imageView = recognizer.view as? UIImageView else { return }
    if let selected = selectedCard {
        if selected === imageView {
            // unflip the card
            imageView.image = backOfCard
            selectedCard = nil
        }
    } else {
        // display face of card
        imageView.image = ...
        selectedCard = imageView
    }
}

Примечание: Даже если пользователь одновременно нажимает на две карты, handleTap будет вызван дважды подряд,Первая карта выиграет, перевернется и станет selectedCard, а вторая будет проигнорирована, потому что тест if selected === imageView не пройден.

0 голосов
/ 23 сентября 2018

У вас есть несколько вариантов.

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

В качестве альтернативы, вы можете добавить переменную экземпляра в ваш класс, которая отслеживает состояние, и использовать ее для установки userInteractionEnabled на ложных изображениях, которые пользователь не должен нажимать.

...