gpt4 book ai didi

swift - 我正在尝试在我的应用程序中为 admobs 创建一个辅助类

转载 作者:行者123 更新时间:2023-11-30 12:28:35 25 4
gpt4 key购买 nike

我的应用程序中有一个 Admobs ADHelper 类。该类的代码是:

  import UIKit
import Firebase
import GoogleMobileAds

class AdHelper {
static let shared = AdHelper()

func initAdMobBannerView(inViewController viewController: UIViewController) -> GADBannerView {
var adMobBannerView = GADBannerView()
if UIDevice.current.userInterfaceIdiom == .phone {
// iPhone
adMobBannerView.adSize = GADAdSizeFromCGSize(CGSize(width: 320, height: 50))
adMobBannerView.frame = CGRect(x: 0, y: viewController.view.frame.size.height, width: 320, height: 50)
} else {
// iPad
adMobBannerView.adSize = GADAdSizeFromCGSize(CGSize(width: 468, height: 60))
adMobBannerView.frame = CGRect(x: 0, y: viewController.view.frame.size.height, width: 468, height: 60)
}
adMobBannerView.adUnitID = "ca-app-pub-2722404425168911/4464296386"
adMobBannerView.rootViewController = viewController

adMobBannerView.delegate = viewController as? GADBannerViewDelegate
//viewController.addSubview(adMobBannerView)

let request = GADRequest()
adMobBannerView.load(request)
return adMobBannerView
UIView.beginAnimations("showBanner", context: nil)
UIView.commitAnimations()
adMobBannerView.isHidden = false
}

}

我正在尝试从另一个 View Controller 调用此类:

func playAd() {

 let adMobBannerView = AdHelper.shared.initAdMobBannerView(inViewController: self)
view.addSubview(adMobBannerView)

}

我在 viewdidload 中将此函数称为 playAd()

没有广告仍在加载!

最佳答案

看看你的类的定义:

class AdHelper: UIViewController

为什么必须扩展UIViewController ?它是一个辅助类,因此不必扩展 UIViewController .

你说:

The problem is ads are not showing up at all when I do this but all of this code is put in the same view controller (without using shared class), they show up.

看看你的initAdMobBanner方法,例如这一行:

adMobBannerView.frame = CGRect(x: 0, y: view.frame.size.height, width: 320, height: 50)

您正在设置 frame您的adMobBannerViewview.frame 的高度开始...但问题是...view有多大?它在哪里初始化?

稍后:

view.addSubview(adMobBannerView)

在这里您要添加您的 adMobBannerViewview ,但是 view 的大小是多少? ?

这也解释了:

but all of this code is put in the same view controller (without using shared class), they show up

是的...因为在这里您知道 View 的大小,并且可以向其中添加内容。

我在这里暗示的是,我认为您应该创建一个单独的类,它继承自 UIViewController然后有一个方法需要 UIViewController作为参数并使用它来创建新的 adMobBannerView .

类似于:

class AdHelper {
static let shared = AdHelper()

func initAdMobBannerView(inViewController viewController: UIViewController) -> GADBannerView {
var adMobBannerView = GADBannerView()
if UIDevice.current.userInterfaceIdiom == .phone {
// iPhone
adMobBannerView.adSize = GADAdSizeFromCGSize(CGSize(width: 320, height: 50))
adMobBannerView.frame = CGRect(x: 0, y: viewController.view.frame.size.height, width: 320, height: 50)
} else {
// iPad
adMobBannerView.adSize = GADAdSizeFromCGSize(CGSize(width: 468, height: 60))
adMobBannerView.frame = CGRect(x: 0, y: viewController.view.frame.size.height, width: 468, height: 60)
}
adMobBannerView.adUnitID = ADMOB_BANNER_UNIT_ID
adMobBannerView.rootViewController = viewController

return adMobBannerView
}
}

然后你可以在普通的 ViewController 中使用它,如下所示:

func playAd() {
let adMobBannerView = AdHelper.shared.initAdMobBannerView(inViewController: self)
view.addSubview(adMobBannerView)
let request = GADRequest()
adMobBannerView.load(request)
}

希望这是有道理的。

关于swift - 我正在尝试在我的应用程序中为 admobs 创建一个辅助类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43870464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com