UIPanGesture или TouchesMoved движущиеся спрайты. Какой метод самый лучший? - PullRequest
1 голос
/ 11 февраля 2020

У меня есть довольно сложное приложение на основе SpriteKit, созданное программно. Я перемещаю множество массивов узлов Sprite и у меня есть два возможных способа добиться этого. Используя либо функцию Touches Moved, либо я могу использовать UIPanGestureRecognizer, чтобы сделать то же самое практически таким же образом.

Но какой самый лучший способ go? У меня также есть много других жестов пользовательского интерфейса, таких как Поворот, Сжатие и двойное касание, и я беспокоюсь о конфликте кода.

Это плохая практика - объединять их? (Я не имею в виду оба метода одновременно - я имею в виду, что некоторые касания читаются с помощью жестов, а другие - с помощью функций касаний). Есть ли у меня больше контроля или точности с панорамированием касаний? Я чувствую, что теперь у меня лучше работает только использование жестов, если это возможно, но как лучше?

Часть моего кода. У меня до 40-50 узлов хранятся в перемещаемых массивах.

В перемещенных касаниях:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
                    for touch in touches{

                        let location = touch.location(in: self)

                        if numberOfBalls >= 0 {
                            for i in 0...(numberOfBalls) {

                                if ballBloqArray[i].contains(location) {

                                    ballBloqArray[i].position = location

                                }
                            }
                        }

                        if numberOfBoxes >= 0 {
                            for i in 0...(numberOfBoxes) {
                                if boxBloqArray[i].contains(location) {
                                    boxBloqArray[i].physicsBody?.pinned = false
                                    boxBloqArray[i].position = location
                                    boxBeingMoved = i
                                }
                            }
                        }
                    }


    }

и использовании PanGesture:

 let panGesture = UIPanGestureRecognizer(target: self, action: #selector(GameScene.tappedOnce(sender:)))
        view.addGestureRecognizer(panGesture)
        panGesture.minimumNumberOfTouches = 1
        panGesture.cancelsTouchesInView = true

@objc func tappedOnce(sender:UIPanGestureRecognizer) {

    if sender.state == .began{


    }

    if sender.state == .changed {
        var location = sender.location(in: self.view)
        location = self.convertPoint(fromView: location)

        print("Single tap")
        print(location)
        if numberOfBalls >= 0 {
            for i in 0...(numberOfBalls) {

                if ballBloqArray[i].contains(location) {

                    ballBloqArray[i].position = location

                }
            }
        }
    }

}

1 Ответ

0 голосов
/ 11 февраля 2020

Нет лучшего, у них обоих есть свои сильные и слабые стороны.

Важно оставаться последовательным. Не объединяйте два. Выберите один или другой метод.

Лично я бы go с Жестами. Он позволяет вам отделить код и дает очень четкое определение того, что выполняется при перемещении касания.

...