Search code examples
swiftxcode6sprite-kitiad

iAds banner jerking/changing size of scene, every time iAd banner is loaded.


Im having troubles with implementing iAds into game without the iAds banner changing the scene e.g. jerking the screen, Every time the ad is loaded. Please help with a solution to stop this from happining.

class GameViewController: UIViewController,ADBannerViewDelegate{
@IBOutlet var adBannerView: ADBannerView? //connect in IB connection inspector with your ADBannerView

override func viewDidLoad() {
    super.viewDidLoad()

    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
        // Configure the view.
        let skView = self.view as! SKView
        skView.showsFPS = true
        skView.showsNodeCount = true

        var defaultsV = NSUserDefaults.standardUserDefaults();
        defaultsV.setInteger(0, forKey: "gameOverCount")
        defaultsV.setBool(false, forKey: "firstSessionEnded")
        defaultsV.synchronize()

        //self.adBannerView!.frame = CGRectMake(0, self.view.frame.size.height-self.adBannerView!.frame.size.height, self.adBannerView!.frame.size.width, self.adBannerView!.frame.size.height)




        self.adBannerView!.delegate = self
        self.adBannerView!.hidden = true //hide until ad loaded

        self.canDisplayBannerAds = true
        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true
        self.adBannerView?.sizeToFit()

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFill
        skView.presentScene(scene)



    }
}

func bannerViewWillLoadAd(banner: ADBannerView!) {
    NSLog("bannerViewWillLoadAd")
    //self.canDisplayBannerAds = true
    self.adBannerView!.hidden = true //hide until ad loaded

    self.adBannerView!.frame = CGRectMake(0, self.view.frame.size.height-self.adBannerView!.frame.size.height, self.adBannerView!.frame.size.width, self.adBannerView!.frame.size.height)



}

func bannerViewDidLoadAd(banner: ADBannerView!) {
    NSLog("bannerViewDidLoadAd")
    self.adBannerView!.frame = CGRectMake(0, self.view.frame.size.height-self.adBannerView!.frame.size.height, self.adBannerView!.frame.size.width, self.adBannerView!.frame.size.height)

    self.adBannerView!.hidden = false //now show banner as ad is loaded
    //self.canDisplayBannerAds = true


}

func bannerViewActionDidFinish(banner: ADBannerView!) {
    NSLog("bannerViewDidLoadAd")


    //optional resume paused game code

}

func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
    NSLog("bannerViewActionShouldBegin")

    //optional pause game code

    return true
}

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

   self.adBannerView!.hidden = true
}

Solution

  • You suggest you should always set canDisplayBannerAds to false as this allows the viewController to resize the view when an ad is shown. If you need create another Bool value to determine the state of your ads.

    //ViewControlller.m
    self.canDisplayBannerAds = false