首页 > 解决方案 > 使用 isHidden = true 隐藏横幅广告

问题描述

我目前在我的 GameViewController 中使用以下代码从 admob 调用横幅广告。

class GameViewController: UIViewController {
var bannerView: GADBannerView!
}

override func viewDidLoad() {
    super.viewDidLoad()
    bannerView = GADBannerView(adSize: kGADAdSizeBanner)
    addBannerViewToView(bannerView)
    bannerView.adUnitID = "ca-app-pub-XXXXXXXXX"  // Default Google Test Ad Address
    bannerView.rootViewController = self
    bannerView.load(GADRequest())
    bannerView.isHidden = false // <----- This works, but doesn't work in GameScene.swift

这是从上面的代码(也在 GameViewController 中)调用以显示广告的函数。

func addBannerViewToView(_ bannerView: GADBannerView) {
   bannerView.translatesAutoresizingMaskIntoConstraints = false
   view.addSubview(bannerView)
   view.addConstraints(
     [NSLayoutConstraint(item: bannerView,
                         attribute: .bottom,
                         relatedBy: .equal,
                         toItem: bottomLayoutGuide,
                         attribute: .top,
                         multiplier: 1,
                         constant: 0),
      NSLayoutConstraint(item: bannerView,
                         attribute: .centerX,
                         relatedBy: .equal,
                         toItem: view,
                         attribute: .centerX,
                         multiplier: 1,
                         constant: 0)
     ])
   }

此代码有效并显示测试广告。但是,在 GameScene.swift 中,当我按下按钮时,我会运行此代码来尝试隐藏广告。

GameViewController().bannerView.isHidden = true

这会导致应用程序因“致命错误:在隐式展开可选值时意外发现 nil”而崩溃。如果我更改它,它不会崩溃,但广告不会隐藏。

GameViewController().bannerView?.isHidden = true

然而在 GameViewController 中,如果我只是将 isHidden 的值更改为 true,那么它就可以工作。

bannerView.isHidden = true

无论如何,当我按下按钮时能够从 GameScene.swift 中隐藏横幅广告?

标签: swiftsprite-kitadmob

解决方案


您正在创建一个新实例GameViewController并切换它的bannerView属性isHidden。您应该切换您正在显示的实例的isHidden属性。bannerViewGameViewController


推荐阅读