Search code examples
swiftiad

Why won't my game pause when an iAd is tapped on in Swift?


What am I doing wrong? I'm trying to get the game to pause when an ad is tapped on but it is still working in the background. How do I get it to pause? I tried other ways to pause the scene but it's not working for me.

    func didLoadAd(banner: ADBannerView) {
        adBannerView.hidden = false
    }


    func bannerViewWillLoadAd(banner: ADBannerView!) {


        println("Ad about to load")

    }

    func bannerViewDidLoadAd(banner: ADBannerView!) {

        adBannerView.center = CGPoint(x: adBannerView.center.x, y: view.bounds.size.height - view.bounds.size.height + adBannerView.frame.size.height / 2)

        adBannerView.hidden = false
        println("Displaying the Ad")

    }

    func bannerViewActionDidFinish(banner: ADBannerView!) {
        /* un-pause when ad is closed */
        if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
            let skView = self.view as SKView
            skView.paused = false
            println("Close the Ad")
        }

    }

    func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
       if  let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
            let skView = self.view as SKView
            skView.paused = true
            println("Leave the application to the Ad")
        //pause game here
        }

        return true
    }

    func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {

        //move off bounds when add didn't load

        adBannerView.center = CGPoint(x: adBannerView.center.x, y: view.bounds.size.height + view.bounds.size.height)
        adBannerView.hidden = true
        println("Ad is not available")

    }
//iAd-----------------------------------------------------------------------------------------------------

Solution

  • I think your problem is here:

    let skView = self.view as SKView
    skView.paused = true
    

    and I think you should check if skView is your game view. self.view might be the ad view at that point.

    To fix it, find your view, instead of using self.

    //at top of class
    var window:UIWindow?
    
    // inside my method/function
    if let viewControllers = window?.rootViewController?.childViewControllers {
        for viewController in viewControllers {
            if viewController.isKindOfClass(MyViewControllerClass) {
                println("Found it!!!")
                viewController.paused = true
                }
            }
        }