我的应用程序中有一个 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
您的adMobBannerView
从 view.frame
的高度开始...但问题是...view
有多大?它在哪里初始化?
稍后:
view.addSubview(adMobBannerView)
在这里您要添加您的 adMobBannerView
至view
,但是 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/