title: Allow touch propagation in SpriteKit
body: <p>Given a <code>SpriteKit</code> scene <code>s</code>, and one node <code>a</code> of type <code>T</code> that inherits from <code>SKSpriteNode</code> contained within <code>s</code>, if both <code>s</code> and <code>a</code> override any touch handler, the touch event is called exclusively on what seems to be the top-most (highest <code>zPosition</code>) node. </p>
  
  <p><strong>If I wanted the scene and its node to perform two different actions concurrently, what pattern would be best to use?</strong></p>
  
  <p>In this case, would it be better to: </p>
  
  <ul>
  <li>Let the scene handle <strong>all</strong> the touches by retrieving the nodes at the location the touch occurred?</li>
  <li>Have a <code>Touchable</code> protocol that the scene would implement and have any node send up an identifier to the scene through an hypothetical <code>touched(_ nodeID: Int)</code> method?</li>
  <li>Have all the children nodes refer to a static <code>TouchHandler</code> object that will perform both actions? </li>
  </ul>
  
  <p><strong>What would you suggest anything else?</strong></p>
  
  <p><strong>Update</strong>: </p>
  
  <p>Given the following code:</p>
  
  <pre><code>class Parent: SKScene {
      override func didMove(to view: SKView) {
          self.addChild(Foo())
      }
  
      override func touchesBegan(_ touches: Set&lt;UITouch&gt;, with event: UIEvent?) {
          //  React to touch, and, for example, move the scene around
      }
  }
  
  class Foo: SKSpriteNode {
      override func touchesBegan(_ touches: Set&lt;UITouch&gt;, with event: UIEvent?) {
          //  React to touch, and, for example, scale up the node by 60%
      }
  }
  </code></pre>
  
  <p>If the user taps on the Foo node, showing on screen, only its <code>touchesBegan(_, event:)</code> method gets called - the <code>Parent</code>'s method gets ignored. </p>
  
  <p><strong>What pattern would be best to use in order to be able for both objects to react to the <code>touchesBegan(_, event:)</code> callback simultaneously</strong>?</p>