 <p>Tokuriku, thanks so much, you we're not quite right but it got me to the eventual answer, here it is </p> <pre><code>import SpriteKit class GameScene: SKScene { var circleTouch: UITouch? override func didMoveToView(view: SKView) { /* Setup your scene here */ let circle = SKShapeNode(circleOfRadius: 40.0) circle.fillColor = UIColor.blackColor() circle.position = CGPoint(x: size.width * 0.5, y: size.height * 0.2) circle.name = "userCircle" addChild(circle) } override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { for touch in touches { if nodeAtPoint(touch.locationInNode(self)).name == "userCircle" { circleTouch = touch as? UITouch } } } override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { for touch in touches { if circleTouch != nil { if touch as UITouch == circleTouch! { let location = touch.locationInNode(self) let touchedNode = nodeAtPoint(location) touchedNode.position = location } } } } override func touchesEnded(touches: NSSet, withEvent event: UIEvent) { for touch in touches { if circleTouch != nil { if touch as UITouch == circleTouch! { circleTouch = nil } } } } </code></pre>