2016-04-24 3 views
1

Я делаю игру SpriteKit в XCode, используя быстрый. Я хочу сделать пользовательские кнопки в меню, и я следую this tutorial, чтобы сделать это. Все работает отлично, за исключением функций touchesMoved.Использование TouchesMoved в Swift 2

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { 
var touch: UITouch = touches.allObjects[0] as UITouch 
var location: CGPoint = touch.locationInNode(self) 

if defaultButton.containsPoint(location) { 
    activeButton.hidden = false 
    defaultButton.hidden = true 
} else { 
    activeButton.hidden = true 
    defaultButton.hidden = false 
} 
} 

Судя по всему, «touches.allObjects [0], как UITouch» больше не работает в Swift 2. Я искал альтернативы, но я не нашел, что работает. Как я могу заменить эту строку кода?

ответ

-1

Правильный способ сделать это заключается в следующем:

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 

     for touch: AnyObject in touches { 

      let location = touch.locationInNode(self) 

      if defaultButton.containsPoint(location) { 
       activeButton.hidden = false 
       defaultButton.hidden = true 
      } else { 
       activeButton.hidden = true 
       defaultButton.hidden = false 
      } 
     } 
    } 
1

По какой-то причине в учебнике используется NSSet, а не Set<UITouch> в touchesMoved. Интересно, перевели ли они учебник из Objective-C в Swift и пропустили их обновление?

func touchesMoved(_ touches: Set<UITouch>, 
     withEvent event: UIEvent?) 

touchesMoved - Apple docs

Обратите внимание на штрихи аргумент типа NSSet в вашем коде, и документы Apple, имеют как Set<UITouch>.

После перехода в режиме Set<UITouch>, попробуйте использовать touches.first as! UITouch

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

Если вы разрешаете мультитач позже, вам нужно будет проверить весь набор, а не просто захватить первый (и только) элемент UITouch.

+0

не знает, почему это получило авансовый голос, мог бы просто прокомментировал, чтобы помочь парню изменить ответ. NSSet использовался в более ранних версиях Swift, поскольку Swift все больше и больше развивается, он будет использовать все меньше и меньше старых технологий, таких как классы NextStep, поэтому при использовании обучающих программ всегда полезно убедиться, что версия Swift имеет совпадение с учебником. – Knight0fDragon

+0

Когда я делаю это, я получаю больше ошибок, чем раньше .. – Gabe12

Смежные вопросы