ios - 通过触摸按钮显示广告横幅

标签 ios swift sprite-kit delegates ads

解释

标题几乎不言而喻。我试图让一个按钮激活一个广告横幅,但 Xcode 在下面返回这条消息;所以,由于 UIViewController,我看到应该在 GameViewController 上调用此横幅,而不是 GameScene。我到处寻找它,但没有找到如何从 GameScene 调用此横幅或通过按钮激活此横幅的其他方式。

Cannot convert value of type 'GameScene' to expected argument type 'UIViewController!'


代码

下面这段代码非常简单。它有一个尝试调用广告横幅的按钮。

import SpriteKit
import Ads

class GameScene: SKScene {

    var button = SKSpriteNode()

    override func didMoveToView(view: SKView) {
        /* Setup your scene here */

        button = SKSpriteNode(imageNamed: "button")
        button.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2)
        button.setScale(0.4)
        addChild(button)
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        /* Called when a touch begins */

        for touch in touches {

            let location = touch.locationInNode(self)
            let node = nodeAtPoint(location)

            if node == button{
                Ads.showAd(AdsShowStyle.BannerBottom, rootViewController: self) //issue line
            }
        }
    }
}

尝试

经过一些研究,我发现使用委托(delegate)可能是可行的。按照 this 的最高投票答案问题,我想出了下面的这段代码,但我有很多问题,我都在努力解决,但没有成功。


GameScene.swift

GameScene

GameViewController.swift

GameViewController


提前致谢,
路易斯。

最佳答案

由于您使用的是 SpriteKit 但我们不知道您使用的是哪个广告网络,我建议在 GameViewController 中使用 NSNotificationCenter 命令并在 GameScene.swift 中使用 postNotificationName 命令而不是 ViewControllerDelegate。这将允许您的广告代码用于任何其他 .swift 文件。 Here's a better explanation of this from another post if needed

注意:这可能有效也可能无效,具体取决于广告网络

GameViewController.swift(来 self 的项目)

import UIKit
import SpriteKit
import GoogleMobileAds

class GameViewController: UIViewController, GADAdDelegate {


var adMobBanner : GADBannerView!


override func viewDidLoad() {
    super.viewDidLoad()

    if let scene = GameScene(fileNamed:"GameScene") {
        // Configure the view.
        let skView = self.view as! SKView
        skView.showsFPS = true
        skView.showsNodeCount = true

        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFill

        skView.presentScene(scene)
    }



    adMobBanner = GADBannerView(adSize: kGADAdSizeSmartBannerPortrait)
    adMobBanner.adUnitID = "your ad unit id"
    adMobBanner.rootViewController = self
    adMobBanner.frame = CGRectMake(0, view.bounds.height - adMobBanner.frame.size.height, adMobBanner.frame.size.width, adMobBanner.frame.size.height)


    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(GameViewController.showAdMob), name: "showAdMobKey", object: nil)




}


func showAdMob() {

    let request : GADRequest = GADRequest()
    adMobBanner.loadRequest(request)
    self.view.addSubview(adMobBanner)

    print("adMob")

}

GameScene.swift(编辑你的)

import SpriteKit
import Ads

class GameScene: SKScene {

var button = SKSpriteNode()

override func didMoveToView(view: SKView) {
    /* Setup your scene here */

    button = SKSpriteNode(imageNamed: "button")
    button.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2)
    button.setScale(0.4)
    addChild(button)
}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    /* Called when a touch begins */

    for touch in touches {

        let location = touch.locationInNode(self)

        if (button.containsPoint(location)) {

            NSNotificationCenter.defaultCenter().postNotificationName("showAdMobKey", object: nil)

        }

     }
  }
} 

关于ios - 通过触摸按钮显示广告横幅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37556905/

相关文章:

iphone - 如何实际实现Apple示例中的分页UIScrollView?

ios - 是否可以使用 SKScene 数组实现 iCarousel?

swift - 预加载还是不预加载?

sprite-kit - spritekit 中不规则形状的物理体

ios - 无法运行 Appium 服务器

ios - 如何在 iOS 中单击注销按钮时移动到根 ViewController?

ios - AFHTTPRequestOperationManager 获取请求失败,Error Domain=AFNetworkingErrorDomain Code=-1016

swift - 在两个实体之间建立关系?

xcode - 登录并读取权限(_ :handler:)' is deprecated: use logInWithReadPermissions:fromViewController:handler: instead

ios - uitableview 数据在快速滚动时重复