我想在我的应用程序中为admobs创建一个帮助类

时间:2017-05-09 12:57:04

标签: swift swift3

我的应用中有一个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()

没有广告仍在加载!

1 个答案:

答案 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

希望这是有道理的。