我的应用中有一个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
}
}
我试图从另一个视图控制器调用此类:
func playAd(){
let adMobBannerView = AdHelper.shared.initAdMobBannerView(inViewController: self)
view.addSubview(adMobBannerView)
}
我在viewdidload中将此函数称为playAd()
没有广告仍在加载!
答案 0 :(得分:0)
看一下你班级的定义:
class AdHelper: UIViewController
为什么必须延长UIViewController
?它是一个帮助类,因此它不应该扩展UIViewController
。
你说:
问题是,当我这样做时,广告根本没有显示,但所有这些代码都放在同一个视图控制器中(不使用共享类),它们会显示出来。
请查看您的initAdMobBanner
方法,例如:
adMobBannerView.frame = CGRect(x: 0, y: view.frame.size.height, width: 320, height: 50)
您将frame
的{{1}}设置为adMobBannerView
的高度......但问题是...... view.frame
有多大?它初始化在哪里?
后来:
view
您要将view.addSubview(adMobBannerView)
添加到adMobBannerView
,但view
的大小是多少?
这也解释了:
但所有这些代码都放在同一个视图控制器中(不使用共享类),它们会显示
是的...因为在这里您知道视图的大小,并且您可以向其添加内容。
我在这里暗示的是,我认为你应该创建一个单独的类,不继承自view
,然后有一个方法需要{{1} }作为参数并使用它来创建新的UIViewController
。
类似的东西:
UIViewController
然后你可以在普通的ViewControllers中使用它,如下所示:
adMobBannerView
希望这是有道理的。