В надежде на немного просветления. У меня есть кусок кода. Который работает довольно хорошо. У меня реализовано 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, поэтому я также открыт для предложений по более жесткому коду. Это моя первая попытка использовать одновременные жесты. Спасибо