如何在 SpriteKit 中添加 iAd 并在场景变化时停用它?

How to add iAd in SpriteKit and deactivate it when a scene changes?

在我的游戏文件 GameScene 中,我编写了要在那里显示的 iAd 代码。

func addiAd(){
    bannerView = ADBannerView(adType: .Banner)
    bannerView.delegate = self
    bannerView.hidden = true
    bannerView.frame = CGRectOffset(bannerView.frame, 0.0, 0.0)
    bannerView.center = CGPointMake(bannerView.center.x,  
    (view?.bounds.size.height)! - bannerView.frame.size.height/2)
    view!.addSubview(bannerView)
    print("iAd is working")
}

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

func bannerViewActionDidFinish(banner: ADBannerView!) {
    bannerView.removeFromSuperview()
}

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

好吧,乍一看好像可以,但并不完美,因为当一个场景转换到另一个名为 GameOverScene 的游戏场景文件时,我的 bannerView 并没有消失,而是永远停留在它出现的地方直到 运行 结束。我想停用这个。是不是我上面的代码写错了?在我的源代码中,我总共想要 GameSceneGameOverScene 中的两个 adBanner 视图。我对错误的假设是我没有在 GameViewController 中编写这些代码,但我不确定。你能告诉我如何实现它并解释它必须写在哪里吗?

在 iAd 委托方法中,您可以更改横幅的 alpha 属性。例如:

func bannerViewDidLoadAd(banner: ADBannerView!) {
    bannerView.alpha = 1.0
}

func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
    bannerView.alpha = 0.0
}

然后当您改变场景或想要确保 iAd 横幅不出现时,您可以设置它的 hidden 属性。例如:

func hideBanner() {
    // Call whenever you don't want the ADBannerView to be on screen
    bannerView.hidden = true
}

func showBanner() {
    // Call when you want the ADBannerView to be on screen
    bannerView.hidden = false
} 

这还需要您更新 addiAd 函数:将 bannerView.hidden = true 更改为 bannerView.alpha = 0.0

最后,您不应该在此处从 Superview 中删除 iAd 横幅:

func bannerViewActionDidFinish(banner: ADBannerView!) {
    bannerView.removeFromSuperview()
}