Итак, я делаю простую 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 для каждой кнопки и джойстика, а затем добавил их каждому из этого. На всякий случай, я все еще подписан на одновременного делегата, но это все еще немного грязно, поэтому я буду благодарен, если вы знаете лучший вариант