如何在 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
并没有消失,而是永远停留在它出现的地方直到 运行 结束。我想停用这个。是不是我上面的代码写错了?在我的源代码中,我总共想要 GameScene
和 GameOverScene
中的两个 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()
}
在我的游戏文件 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
并没有消失,而是永远停留在它出现的地方直到 运行 结束。我想停用这个。是不是我上面的代码写错了?在我的源代码中,我总共想要 GameScene
和 GameOverScene
中的两个 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()
}