如何在 SpriteKit 中添加 iAd 并在场景更改时停用它



在我的游戏文件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不会消失并永远停留在它出现的地方,直到运行结束。我想停用它。我的代码上面写错了吗?在我的源代码中,我总共想要两个adBanner视图,分别是GameSceneGameOverScene。我对错误的假设是我没有在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()
}

最新更新