If you have ever played Flappy Bird and get a game over, an ad gets displayed on the top of the app until your start a new game. I want to do that, but I'm having a hard time passing the required code into the gameOver function (if possible somehow).
Do I have to add a whole new scene for this or can I just do it in the class of the GameScene?
I know to display ads, you go to the ViewController.swift and do this:
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let scene = GameScene(size: CGSize(width: 2048, height: 1536))
let skView = view.self as! SKView
skView.ignoresSiblingOrder = false
scene.scaleMode = .AspectFill
skView.presentScene(scene)
self.canDisplayBannerAds = true
}
}
The only problem with this is that it will display ads the entire time, even when the game is running. As soon as it moves in to the GameScene.swift file, the ads are still running. So, I tried to add the viewDidLoad() into the GameScene.swift file (which is the whole game screen. My game has no title scene or gameover scene. Those scenes take place in the GameScene class; all it does is show an image).
I added this into the GameScene.swift but it doesn't do anything.
class adBannerView: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.canDisplayBannerAds = true
}
}
How do I make ads pop up when the gameOver() function ocurs? Or when it's game over? I've tried looking at other questions but they were different than mine. I can't just add self.canDisplayAds = true inside the gameOver function.
Note that code is required is Swift 2.0 and I'm using Xcode 7 Prerelease 2.
SOLUTION I solved it while looking around a bit more. I added the following code to my viewController class.
var SH = UIScreen.mainScreen().bounds.height
let transition = SKTransition.fadeWithDuration(0)
var UIiAd: ADBannerView = ADBannerView()
override func viewWillAppear(animated: Bool) {
var BV = UIiAd.bounds.height
UIiAd.delegate = self
UIiAd.frame = CGRectMake(UIScreen.mainScreen().bounds.width / 4.6, SH + BV, 0, 0)
self.view.addSubview(UIiAd)
}
override func viewWillDisappear(animated: Bool) {
UIiAd.delegate = nil
UIiAd.removeFromSuperview()
}
func bannerViewDidLoadAd(banner: ADBannerView!) {
var BV = UIiAd.bounds.height
UIView.beginAnimations(nil, context: nil)
UIView.setAnimationDuration(0.5) // Time it takes the animation to complete
UIiAd.alpha = 1 // Fade in the animation
UIView.commitAnimations()
}
func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
UIView.beginAnimations(nil, context: nil)
UIView.setAnimationDuration(0.5)
UIiAd.alpha = 0
UIView.commitAnimations()
}
func showBannerAd() {
UIiAd.hidden = false
var BV = UIiAd.bounds.height
UIView.beginAnimations(nil, context: nil)
UIView.setAnimationDuration(0.5) // Time it takes the animation to complete
UIiAd.frame = CGRectMake(UIScreen.mainScreen().bounds.width / 4.6, SH - BV, 0, 0) // End position of the animation
UIView.commitAnimations()
}
func hideBannerAd() {
UIiAd.hidden = true
var BV = UIiAd.bounds.height
UIView.beginAnimations(nil, context: nil)
UIView.setAnimationDuration(0.5) // Time it takes the animation to complete
UIiAd.frame = CGRectMake(UIScreen.mainScreen().bounds.width / 4.6, SH + BV, 0, 0) // End position of the animation
UIView.commitAnimations()
}
override func viewDidLoad() {
super.viewDidLoad()
self.UIiAd.hidden = true
self.UIiAd.alpha = 0
NSNotificationCenter.defaultCenter().addObserver(self, selector: "hideBannerAd", name: "hideadsID", object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "showBannerAd", name: "showadsID", object: nil)
//My other code
}
I then added this code into the scene.swift file that will show the ads. These functions are placed outside the class.
func showAds() {
NSNotificationCenter.defaultCenter().postNotificationName("showadsID", object: nil)
}
func hideAds() {
NSNotificationCenter.defaultCenter().postNotificationName("hideadsID", object: nil)
}
And then when I want to show ads, I call the function in the gameOver() with showAds(). Works perfect!!