У меня есть довольно сложное приложение на основе 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
}
}
}
}
}