Swift: 去除Spritekit中不同场景的广告

Swift: Remove ads different scene in Spritekit

我正在使用 MoPub 横幅广告,我将以下代码添加到我的视图控制器的 viewDidLoad 中:

     self.adView.delegate = self
    self.adView.frame = CGRectMake(0, self.view.bounds.size.height - MOPUB_BANNER_SIZE.height,
        MOPUB_BANNER_SIZE.width, MOPUB_BANNER_SIZE.height)
    self.view.addSubview(self.adView)
    self.adView.loadAd()

但是当我只希望广告在主菜单场景中可见时,它使广告在所有场景中都可见。

如何去除我不希望出现的场景中的广告?

这可能不是最好的方法,但可能是最简单的方法。您可以使用 NSNotification 向您的 ViewController 广播消息,无论何时您希望显示或隐藏您的横幅。

例如,如果您在 initviewDidLoad 上的 ViewController 中添加一个 "observer":

NSNotificationCenter.defaultCenter().addObserver(
  self, 
  selector: "hideBannerAd", 
  name: "hideAd", 
  object: nil)

ViewController 监听一个名为 "hideAd" 的消息,然后执行一个名为 hideBannerAd 的方法。

然后实现这个方法:

func hideBannerAd(){
  self.adView.hidden = true
}

一定要删除 deinit 上的观察者,这不太可能成为 SpriteKitViewController 的持久性问题,但这是一个很好的做法。

deinit{
  NSNotificationCenter.defaultCenter().removeObserver(self)
}

然后,当您想要显示或隐藏视图时,例如在场景转换或游戏结束方法中,您可以通过使用以下方法触发观察者来实现此 hideBannerAd 方法:

NSNotificationCenter.defaultCenter().postNotificationName("hideAd", object: nil)

横幅应该隐藏起来。然后可以通过将 hidden 属性 设置为 false 来针对类似的 showBannerAd 方法重复此操作,或者您可以使用一个方法来简单地切换隐藏的 属性 ] 使用 adView.hidden = !adView.hidden.

希望对您有所帮助。