2016-04-24 12 views
1

Ich mache ein SpriteKit-Spiel in XCode mit Swift. Ich möchte benutzerdefinierte Schaltflächen im Menü erstellen, und ich folge this tutorial, um es zu tun. Alles funktioniert gut außer der touchesMoved-Funktion.Verwenden von TouchesMoved in 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 
} 
} 

Offenbar die „touches.allObjects [0] als UITouch“ funktioniert nicht mehr in Swift 2. Ich nach Alternativen gesucht haben, aber ich habe nicht das funktioniert gefunden. Wie kann ich diese Codezeile ersetzen?

Antwort

-1

Der richtige Weg, es zu tun, ist dies:

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

Aus irgendeinem Grund verwendet das Lernprogramm NSSet statt Set<UITouch> in touchesMoved. Ich frage mich, ob sie das Tutorial von Objective-C nach Swift übersetzt und verpasst haben, sie zu aktualisieren?

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

touchesMoved - Apple docs

Hinweis des berührte Argument ist vom Typ NSSet in Ihrem Code, und die Apple-docs hat es als Set<UITouch>.

Sobald du mit Set<UITouch> wechseln, versuchen Sie es mit touches.first as! UITouch

vorsichtig sein, wenn es gleich Null sein kann, ich mit den Benutzereingabefunktionen auf iOS nicht vertraut bin.

Wenn Sie Multitouch später zulassen, müssen Sie das gesamte Set überprüfen, anstatt nur das erste (und einzige) UITouch-Element zu verwenden.

+0

nicht sicher, warum dies eine nach unten Stimme bekam, könnte nur kommentiert der Mann die Antwort ändern zu helfen. NSSet wurde in früheren Versionen von Swift verwendet, da sich Swift immer mehr entwickelt. Es wird immer weniger alte Technologien wie NextStep-Klassen verwenden. Bei der Verwendung von Tutorials ist es immer gut, sicherzustellen, dass die Version von Schnell haben Sie Übereinstimmungen mit denen des Tutorials. – Knight0fDragon

+0

Wenn ich das mache, bekomme ich mehr Fehler als zuvor .. – Gabe12