Одновременные жесты и масштабирование щепотки Жест в быстром - PullRequest
1 голос
/ 27 января 2020

В надежде на немного просветления. У меня есть кусок кода. Который работает довольно хорошо. У меня реализовано 2 жеста - сжатие и поворот.

let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(pinchAction(sender:)))
view.addGestureRecognizer(pinchGesture)
pinchGesture.delegate = self
let rotateGesture = UIRotationGestureRecognizer(target: self, action: #selector(rotateAction(sender:)))
view.addGestureRecognizer(rotateGesture)
rotateGesture.delegate = self

, а затем эта функция, которую я нашел здесь в другом потоке.

   func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        if (gestureRecognizer is UIPanGestureRecognizer || gestureRecognizer is UIRotationGestureRecognizer) {
            return true
        } else {
            return false
        }
    }

мой класс установлен на

class GameScene: SKScene, UIGestureRecognizerDelegate {

Итак, мой первый вопрос. Как, черт возьми, эта функция на самом деле вызывается? Он вызывается автоматически, потому что он называется gestRecognizer? Я не называю это в другом месте как функцию в моем коде. Извините, я нахожу это непонятным.

Другая интересная проблема заключается в том, что, когда я масштабирую свой узел SKSprite с помощью функции сжатия, я хочу, чтобы он не возвращался к масштабу первоначального сжатия. Я установил переменную для масштаба настраиваемого узла и принял его в начале пинча, а также отрегулировал переменную, когда пинч заканчивается, следующим образом:

 @objc func pinchAction(sender:UIPinchGestureRecognizer){
        if sender.state == .began{
            //print("Pinch Began")
            pointer.setScale(CGFloat(protractorScale * 0.5))
            protractor.setScale(CGFloat(protractorScale * 0.45))

        }
        if sender.state == .changed{
           // print("Pinch Change")
            let newScale = sender.scale
            protractorScale = Double(newScale)
            print(newScale)
            pointer.setScale(CGFloat(protractorScale * 0.5))
            protractor.setScale(CGFloat(protractorScale * 0.45))
            ballSpeed = Float(newScale * 500)
        }
        if sender.state == .ended{
           // print("Pinch Ended")

            let newScale = sender.scale
                       protractorScale = Double(newScale)


        }
    }

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

Я ценю, что мой код упрощен c, поэтому я также открыт для предложений по более жесткому коду. Это моя первая попытка использовать одновременные жесты. Спасибо

1 Ответ

0 голосов
/ 28 января 2020

Я наконец понял, что, очевидно, жест щепотки всегда изначально возвращает масштабный коэффициент пинч-1. Очевидно! Однажды я понял это и по совету KnightOfDragon все было просто.

   @objc func pinchAction(sender:UIPinchGestureRecognizer){
        if sender.state == .began{

            let startScale = sender.scale
            print("initial pinch scale \(startScale)")

            pointer.setScale(CGFloat(protractorScale))
            protractor.setScale(CGFloat(protractorScale))

        }
        if sender.state == .changed{

            let getScale = sender.scale
            print(getScale)

            let newScale = (CGFloat(protractorScale) * getScale)
            pointer.setScale(newScale)
            protractor.setScale(newScale)
            ballSpeed = Float(newScale * 100)

            ballSpeedIndicator.text = "\(Int(ballSpeed))"

        }
        if sender.state == .ended{
            // print("Pinch Ended")

            let newScale = sender.scale
            protractorScale = protractorScale * Double(newScale)


        }
    }

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

...