Swift 我正在尝试在我的应用程序中为admobs创建一个帮助器类
我的应用程序中有一个Admobs ADHelper类。此类的代码为:Swift 我正在尝试在我的应用程序中为admobs创建一个帮助器类,swift,swift3,Swift,Swift3,我的应用程序中有一个Admobs ADHelper类。此类的代码为: import UIKit import Firebase import GoogleMobileAds class AdHelper { static let shared = AdHelper() func initAdMobBannerView(inViewController viewController: UIViewController) -> GADBannerVi
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(){
}
我在viewdidload中将此函数称为playAd()
没有广告还在加载 看看你的类的定义:
class AdHelper: UIViewController
为什么它必须扩展UIViewController
?它是一个助手类,因此不必扩展UIViewController
你说:
问题是当我这样做的时候,广告根本没有出现,但是所有这些代码都放在同一个视图控制器中(没有使用共享类),它们会出现
看看您的initAdMobBanner
方法,例如这一行:
adMobBannerView.frame = CGRect(x: 0, y: view.frame.size.height, width: 320, height: 50)
您正在将adMobBannerView
的frame
设置为从视图的高度开始。frame
…但问题是,视图有多大?在哪里草签
后来:
view.addSubview(adMobBannerView)
您正在将您的adMobBannerView
添加到视图
,但是视图的大小是多少
这也解释了:
但是所有这些代码都放在同一个视图控制器中(不使用共享类),它们会显示出来
是的……因为在这里您知道视图的大小,并且可以向其中添加内容
我在这里暗示的是,我认为您应该创建一个独立的类,该类不从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)
}
希望这有意义。感谢您及时回复。我尝试了你的代码,但当我尝试在我的普通视图中使用控制器类型“AdHelper”时,得到了这个结果。没有替换成员sharedI让adMobBannerView=AdHelper.shared.initAdMobBannerView(inViewController:self)视图。addSubview(adMobBannerView)让adMobBannerView=AdHelper.sharedHelper.initAdMobBannerView(inViewController:self)addSubview(adMobBannerView),错误消失,但仍然没有出现广告。我还从助手类的定义中删除了UIViewController。你能帮忙吗!啊!!很抱歉我更新了我的答案,并将sharedHelper
重命名为shared
谢谢,但问题是当我刚刚使用shared时,我收到一个错误,说Type'AdHelper'没有共享成员。我尝试了更新的代码,现在没有错误,但广告仍然没有显示。你能尽快调查一下这件事并提供帮助吗?
func playAd() {
let adMobBannerView = AdHelper.shared.initAdMobBannerView(inViewController: self)
view.addSubview(adMobBannerView)
let request = GADRequest()
adMobBannerView.load(request)
}