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

标签 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
    }

}

我正在尝试从另一个 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/

相关文章:

swift - swift 3 中 'continue' Bolts-Swift 的使用不明确

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

ios - 表达式太复杂而无法在 Xcode 9 中解决问题?

ios - CollectionViewDelegate 方法在 Swift 3 迁移后不会被调用

swift - 将位索引数组转换为 OptionSet

swift - Realm Swift 选择与一对多关系实体中的一个字段匹配的所有值

iphone - App Delegate 中的 Core Data 堆栈变量中的 Swift 语法不明确

ios - 尝试给我们 UIAlertController 打分

swift - 工具栏正在删除我在NavigationView中的后退按钮

ios - 如何在 Swift 中扩展特定 UIButton 的点击区域?