Использует одновременно делегирование, но все же один жест отменяет другой - PullRequest
0 голосов
/ 11 апреля 2020

Итак, я делаю простую 2D-игру, и я сделал 2 кнопки для движения и один джойстик для прицеливания. Поэтому я создал один longPressGesture с минимальной длительностью = 0, чтобы определить, когда он touchDown, и два жеста панорамирования для кнопок и джойстика. Для кнопок я выбрал панорамирование, потому что хочу скользить по кнопкам и заставлять их делать что-то, а не просто нажимать снова и снова.

Здесь я создаю жесты.

func createGestures() {

        var gestureArray = [UIGestureRecognizer]()
        //tapDownGesture
        let tapDownGesture = UILongPressGestureRecognizer(target: self, action: #selector(tapDownFunc(sender:)))
        tapDownGesture.minimumPressDuration = 0
        tapDownGesture.name = "longGesture"

        //tapUpGesture
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapFunc(sender:)))

        //panGesture
        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(panFunc(sender:)))
        let secondPanGesture = UIPanGestureRecognizer(target: self, action: #selector(panFunc(sender:)))
        secondPanGesture.name = "panGesture"
        panGesture.name = "panGesture"


        tapDownGesture.delegate = self
        secondPanGesture.delegate = self
        panGesture.delegate = self
        tapGesture.delegate = self

        //gestureArray.append(tapGesture)
        gestureArray.append(secondPanGesture)
        gestureArray.append(panGesture)
        gestureArray.append(tapDownGesture)

        for i in gestureArray {
            self.view.addGestureRecognizer(i)
        }

    }

И там is делегат

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
}

Я искал решение, но я только нашел, что мне нужно использовать одновременный делегат, который я уже использую.

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

Кроме того, нет кода, который не смог бы выполнить другой жест или что-то подобное. Кнопки - это UIButton, а джойстик - это SKNode

Редактировать: Итак, я решил эту проблему, сделав uiview для джойстика (потому что класс sknode не может иметь gestRecognizer), а затем создал другой GestureRecognizer для каждой кнопки и джойстика, а затем добавил их каждому из этого. На всякий случай, я все еще подписан на одновременного делегата, но это все еще немного грязно, поэтому я буду благодарен, если вы знаете лучший вариант

1 Ответ

0 голосов
/ 12 апреля 2020

Из того, что я вижу, вы добавляете все жесты к self.view. Если вместо этого вы добавите каждый жест к компоненту представления, для которого он предназначен, скорее всего, вам даже не понадобится пытаться обеспечить одновременность.

...