2015-07-24 2 views
1

Я настраиваю объявление для интерстиции в GameViewController и хотел бы вызвать функцию, загружающую объявление в GameOverScene. Однако GameViewController подключен к GameScene, а не GameOverScene. Как я могу назвать функцию loadAd() в GameOverScene?Как вызвать методы из GameViewController в GameOverScene

GameViewController Код:

import iAd 

extension SKNode { 
class func unarchiveFromFile(file : String) -> SKNode? { 
    if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") { 
     var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)! 
     var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData) 

     archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene") 
     let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameScene 
     archiver.finishDecoding() 
     return scene 
    } else { 
     return nil 
    } 
} 
} 

class GameViewController: UIViewController, ADInterstitialAdDelegate { 

var interAd = ADInterstitialAd() 
var interAdView: UIView = UIView() 

var closeButton = UIButton.buttonWithType(UIButtonType.System) as! UIButton 

override func viewDidLoad() { 
    super.viewDidLoad() 


    closeButton.frame = CGRectMake(10, 10, 20, 20) 
    closeButton.layer.cornerRadius = 10 
    closeButton.setTitle("x", forState: .Normal) 
    closeButton.setTitleColor(UIColor.blackColor(), forState: .Normal) 
    closeButton.backgroundColor = UIColor.whiteColor() 
    closeButton.layer.borderColor = UIColor.blackColor().CGColor 
    closeButton.layer.borderWidth = 1 
    closeButton.addTarget(self, action: "close:", forControlEvents: UIControlEvents.TouchDown) 



    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("pauseTimers:"), name:UIApplicationWillResignActiveNotification, object: nil) 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("startTimers:"), name:UIApplicationDidBecomeActiveNotification, object: nil) 

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

     /* Sprite Kit applies additional optimizations to improve rendering performance */ 
     skView.ignoresSiblingOrder = true 

     /* Set the scale mode to scale to fit the window */ 
     scene.size = skView.bounds.size 
     scene.scaleMode = .AspectFill 

     skView.presentScene(scene) 
    } 
} 

func close(sender: UIButton) { 
    closeButton.removeFromSuperview() 
    interAdView.removeFromSuperview() 
} 

func loadAd() { 
    println("load ad") 
    interAd = ADInterstitialAd() 
    interAd.delegate = self 

} 

func interstitialAdDidLoad(interstitialAd: ADInterstitialAd!) { 
    println("ad did load") 

    interAdView = UIView() 

    interAdView.frame = self.view.bounds 
    view.addSubview(interAdView) 

    interAd.presentInView(interAdView) 
    UIViewController.prepareInterstitialAds() 

    interAdView.addSubview(closeButton) 
} 


func interstitialAdDidUnload(interstitialAd: ADInterstitialAd!) { 


} 

func interstitialAd(interstitialAd: ADInterstitialAd!, didFailWithError error: NSError!) { 
    println("failed to receive") 
    closeButton.removeFromSuperview() 
    interAdView.removeFromSuperview() 

} 

} 

В GameOverScene Я пытаюсь вызвать функцию loadAd(), но не показывается объявление.

import Foundation 

import SpriteKit 

import UIKit 

import iAd 

class GameOverScene : SKScene { 

override func didMoveToView(view : SKView) { 
    //Background Color 
    scene?.backgroundColor = UIColor.blackColor() 

    GameViewController().loadAd() 
} 
} 

Консоль показывает только «загрузочное объявление», но не «объявление действительно загружалось».

ответ

1

Наконец-то выяснилось.

Я добавил этот код на didmovetoview в GameOverScene

let controller = self.view?.window?.rootViewController as! GameViewController 

    controller.loadAd() 
Смежные вопросы