App Crashs on Touch of the screen Scenekit with a overlayskscene Xcode Swift

Hey ok what is the best way to recognize touch for a HUD on a scene kit 3D game on a Overlayskscene. because i have a button called “AButton” but when ever i touch the Button or the screen the game crashes after hours of search I’m guessing the problem is the touchbegin on the scene kit don’t exactly get along. But then how do i make it so that when a user touches a button on the HUD it doesn’t crash the system and it actually works. can you look at my code and rewrite it. do i use touches begin or do i us hit test or something else (I never have used hit test before)?

handleTap:]: unrecognized selector sent to instance 0x14d547710′
*** First throw call stack:
(0x1868042d8 0x1980300e4

  • Update local database in the background through silent push notification when app is not running
  • Swift HTML Decoding Trouble
  • iPhone Push Notification Character Limit
  • iOS 7 AVCaptureMetadataOutput delegate (QRCode scanner)
  • NSNumberFormatter and 'th' 'st' 'nd' 'rd' (ordinal) number endings
  • How to solve SceneKit double not supported error?
  • Code:

     import iAd
     import UIKit
     import GameKit
     import SceneKit
     import StoreKit
     import SpriteKit
     import QuartzCore
     import Foundation
     import AVFoundation
     import AudioToolbox
    
      //============================================================
     class GameViewController: UIViewController, ADBannerViewDelegate, SKPhysicsContactDelegate, SKSceneDelegate, SCNSceneRendererDelegate, SCNPhysicsContactDelegate{
    
    
       let FieldScene = SCNScene(named: "art.scnassets/TesingCampusField.dae")!
    
    let GuyScene = SCNScene(named: "art.scnassets/Guy.dae")!
    //-------------------HUD-SetUp-------------------------------------------------------
    let overlayScene = SKScene(size: CGSizeMake(100, 100))
    override func viewDidLoad() {
        super.viewDidLoad()
    
        let scnView = self.view as! SCNView
        scnView.overlaySKScene = overlayScene
        scnView.backgroundColor = UIColor.whiteColor()
        scnView.scene = FieldScene
        scnView.delegate = self
        scnView.overlaySKScene!.delegate = self
        scnView.overlaySKScene!.anchorPoint = CGPointMake(0, 0)
        scnView.overlaySKScene!.physicsWorld.contactDelegate = self
        scnView.overlaySKScene!.physicsWorld.gravity = CGVectorMake(0.0, 0.0)
        scnView.allowsCameraControl = false
        scnView.showsStatistics = false
    
        let Guy1: SCNNode = GuyScene.rootNode.childNodeWithName("Bob_014", recursively: true)!
        FieldScene.rootNode.addChildNode(Guy1)
    
        ButtonA.size = CGSize(width: 6, height: 9)
        ButtonA.anchorPoint = CGPointMake(-13.3, -0.5)
        ButtonA.zPosition = 0
        overlayScene.addChild(ButtonA)
    
        let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:")
        scnView.addGestureRecognizer(tapGesture)
        //--------------------------
        let cameraNode = SCNNode()
        cameraNode.camera = SCNCamera()
        FieldScene.rootNode.addChildNode(cameraNode)
        cameraNode.position = SCNVector3(x: 0, y: 5, z: 15)
        //-----------------------------------------------
        let lightNode = SCNNode()
        lightNode.light = SCNLight()
        lightNode.light!.type = SCNLightTypeOmni
        lightNode.position = SCNVector3(x: 0, y: 10, z: 10)
        FieldScene.rootNode.addChildNode(lightNode)
        //-----------------------------------------------
        let ambientLightNode = SCNNode()
        ambientLightNode.light = SCNLight()
        ambientLightNode.light!.type = SCNLightTypeAmbient
        ambientLightNode.light!.color = UIColor.darkGrayColor()
        FieldScene.rootNode.addChildNode(ambientLightNode)
        //----------------------------------------------
    }
        func AButtonPressed() {
        let AButtonPressed = SKTexture(imageNamed: "GreenAButtonPressed")
        let OrignalButtonA = SKTexture(imageNamed:"GreenAButton")
        let AButtonPressedAnimation = SKAction.animateWithTextures([AButtonPressed, OrignalButtonA], timePerFrame: 0.2)
        let RunAButtonPressedAnimation = SKAction.repeatAction(AButtonPressedAnimation, count: 1)
        ButtonA.runAction(RunAButtonPressedAnimation)
        print("finishedpressing")
    }
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        /* Called when a touch begins */
    
        for touch: AnyObject in touches {
            let location1 = touch.locationInNode(self.overlayScene)
            if self.overlayScene.nodeAtPoint(location1) == self.ButtonA {
                AButtonPressed()
                print("AButtonPressed")
            }
        }
    

    Solutions Collect From Internet About “App Crashs on Touch of the screen Scenekit with a overlayskscene Xcode Swift”

    your gesture recognizer is configured to call the handleTap: method when the user taps the view, but you don’t define that method.

    func handleTap(gestureRecognizer: UITapGestureRecognizer) {
        // do something
    }
    

    If you want to use touchesBegan directly, then you don’t need the gesture recognizer.