Search code examples
iosswiftiad

iAd ADBannerView changes the size of SKScene


I feel like I've looked everywhere and I can't figure it out. I'm trying to show a banner ad at the bottom of my menu screen like so:

enter image description here

But after I display my "game over" screen (which also has an ad on it) The main menu looks like this:

enter image description here

Any help would be greatly appreciated. I call the ads by using the NSNotificationCenter and the GameOver SKScene calls presentScene to get back to the Main Menu. I assume it has something to do with frame size in that call, but I do not know how to fix it.

Inside my GameViewController:

override func viewDidLoad() {
    //code
    loadAds()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "showiAdBanner", name: "showiAdBanner", object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "hideiAdBanner", name: "hideiAdBanner", object: nil)
}

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

func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
    adBannerView.hidden = true
}

func loadAds(){
    adBannerView = ADBannerView(frame: CGRect.zeroRect)
    adBannerView.center = CGPoint(x: adBannerView.center.x, y: view.bounds.size.height - adBannerView.frame.size.height / 2)
    adBannerView.delegate = self
    adBannerView.hidden = true
    adBannerView.layer.zPosition = 10
    view.addSubview(adBannerView)
}

func showiAdBanner() {
    if adBannerView.bannerLoaded {
        adBannerView.hidden = false
    }
}

func hideiAdBanner() {
    adBannerView.hidden = true
}

Inside SpriteKit "Start" Scene:

override func didMoveToView(view: SKView) {
    //code
    NSNotificationCenter.defaultCenter().postNotificationName("showiAdBanner", object: nil)
}

Solution

  • I ended up figuring out a solution for my situation. I simply have a different SKScene load up, wait a second, then calls my other one. This way, the menu always looks the same.