【问题标题】:Running a function (pause menu) when iAd is clicked SpriteKit Swift单击 iAd 时运行功能(暂停菜单) SpriteKit Swift
【发布时间】:2015-11-23 17:40:25
【问题描述】:

我在我的 SpriteKit / Swift 游戏中实现了 iAd。当用户点击广告时,我无法找到如何在 GameScene 中运行功能(我有一个功能会显示暂停菜单),而不仅仅是暂停场景。我该如何做到这一点?谢谢。

编辑:这是我的 GameViewController。

import UIKit
import SpriteKit
import iAd

class GameViewController: UIViewController, ADBannerViewDelegate {

var SH = UIScreen.mainScreen().bounds.height
let transition = SKTransition.fadeWithDuration(1)
var UIiAd: ADBannerView = ADBannerView()

override func viewWillAppear(animated: Bool) {
  /*  var BV = UIiAd.bounds.height
    UIiAd.delegate = self
    UIiAd.frame = CGRectMake(0, SH + BV, 0, 0)
    self.view.addSubview(UIiAd) */

    UIiAd.setTranslatesAutoresizingMaskIntoConstraints(false)
    UIiAd.delegate = self
    self.view.addSubview(UIiAd)
    let viewsDictionary = ["bannerView":UIiAd]
    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[bannerView]|", options: .allZeros, metrics: nil, views: viewsDictionary))
    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[bannerView]|", options: .allZeros, metrics: nil, views: viewsDictionary))

}

override func viewWillDisappear(animated: Bool) {
    UIiAd.delegate = nil
    UIiAd.removeFromSuperview()
}

func bannerViewDidLoadAd(banner: ADBannerView!) {
    var BV = UIiAd.bounds.height
    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(1) // Time it takes the animation to complete
    UIiAd.alpha = 1 // Fade in the animation
    UIView.commitAnimations()

}

func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(1)
    UIiAd.alpha = 0
    UIView.commitAnimations()
}

func showBannerAd() {
    UIiAd.hidden = false
    var BV = UIiAd.bounds.height

    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(10) // Time it takes the animation to complete
    UIiAd.frame = CGRectMake(0, SH - BV, 2048, 0) // End position of the animation
    UIView.commitAnimations()
}

func hideBannerAd() {
    UIiAd.hidden = true
    var BV = UIiAd.bounds.height

    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(1) // Time it takes the animation to complete
    UIiAd.frame = CGRectMake(0, SH + BV, 0, 0) // End position of the animation
    UIView.commitAnimations()
}

override func viewDidLoad() {
    super.viewDidLoad()
    self.UIiAd.hidden = true
    self.UIiAd.alpha = 0

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "hideBannerAd", name: "hideadsID", object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "showBannerAd", name: "showadsID", object: nil)

    let scene = MainMenu(size: CGSize(width: 2048, height: 1356))
    let skView = self.view as! SKView
    skView.showsFPS = true
    skView.showsNodeCount = true
    skView.ignoresSiblingOrder = true
    scene.scaleMode = .AspectFill
    skView.presentScene(scene)
}

override func prefersStatusBarHidden() -> Bool {
    return true
}   

然后我在GameScene中导入iAd,添加ADBannerViewDelegate,然后添加这段代码

var iAdBanner: ADBannerView = ADBannerView()
func showAds(){
    NSNotificationCenter.defaultCenter().postNotificationName("showadsID", object: nil)
}

func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
    iAdBanner.delegate = self
    println("Clicked")
    paused = true
    return true
}

【问题讨论】:

  • 它是横幅广告吗?

标签: ios swift sprite-kit iad


【解决方案1】:

试试这个功能的横幅广告:

func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
    println("Clicked")

    // If you want to pause game scene:
    let skView: SKView = self.view as! SKView 
    skView.scene.paused = true

    return true
}

还有:

func bannerViewActionDidFinish(banner: ADBannerView!) {
    println("Closed")

    // If you want to continue game scene:
    let skView: SKView = self.view as! SKView 
    skView.scene.paused = false
}

【讨论】:

  • 这很好用,谢谢。当我把这个功能放在 GameScene 中时,它不起作用。有没有办法让这成为可能? @Arefly
  • @SamAcquaviva 是否已将代理 ADBannerViewDelegate 添加到您的游戏场景和 iAdBanner.delegate = self
  • 是的。我将 iAdBanner 声明为 ADBannerView(),这是正确的吗?此外,该函数在我加载视图时运行两次,但在我打开广告时没有运行,你知道为什么会这样吗? @Arefly
  • 那很奇怪。您的意思是Clicked 在您启动应用程序时打印了两次,但在您点击广告时没有打印? @SamAcquaviva
  • 是的。我有两个场景,一个主菜单场景和一个游戏场景。我只有在游戏场景加载时才投放广告,这会影响它吗? @Arefly
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多