【问题标题】:iAds disabling touches Sprite Kit and SwiftiAds 禁用触及 Sprite Kit 和 Swift
【发布时间】:2015-03-12 22:58:48
【问题描述】:

我刚刚在我的游戏中实现了 iAd。当我运行游戏时,添加横幅出现在屏幕底部。唯一的问题是,一旦测试广告完成并重新开始,屏幕上会出现一个小抖动,会在瞬间禁用触摸。问题是该游戏是基于触摸的游戏,当发生此问题时,它会禁用触摸足够长的时间以使玩家输掉游戏。那么其他人是否有这个问题或过去有过这个问题,我可以做些什么来避免它?我已经包含了我用来实现以下广告的代码。

//
//  GameViewController.swift
//  Flappy Bird (swift)
//

import UIKit
import SpriteKit
import iAd

extension SKNode {
    class func unarchiveFromFile(file : NSString) -> SKNode? {
        if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
            var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!
            var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)

            archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
            let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene
            archiver.finishDecoding()
            return scene
        } else {
            return nil
        }
    }
}
class GameViewController: UIViewController, ADBannerViewDelegate {

    var bannerView:ADBannerView?

    override func viewDidLoad() {
        super.viewDidLoad()
        self.bannerView?.delegate = self
        self.bannerView?.hidden = false


        if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
            // Configure the view.
            let skView = self.view as SKView
           skView.showsFPS = true
            skView.showsNodeCount = false
            skView.showsPhysics = false

            /* 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)

            self.canDisplayBannerAds = true
        }
    }

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

    override func supportedInterfaceOrientations() -> Int {
        if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
            return Int(UIInterfaceOrientationMask.AllButUpsideDown.rawValue)
        } else {
            return Int(UIInterfaceOrientationMask.All.rawValue)
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Release any cached data, images, etc that aren't in use.
    }

    func bannerViewDidLoadAd(banner: ADBannerView!) {
        println("iAd did load: displaying iAd")
        self.bannerView?.hidden = false
    }

    func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
        println("iAd will leave")
        return willLeave
    }

    func bannerView(banner: ADBannerView!, didFailToRecieveAdWithError error: NSError!){
        println("iAd failed to load")
        self.bannerView?.hidden = true
    }

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

【问题讨论】:

    标签: ios swift sprite-kit iad


    【解决方案1】:
    func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
        println("iAd will leave")
        return willLeave
    }
    

    尝试返回 true 而不是 willLeave 或尝试删除

    self.canDisplayBannerAds = true
    

    其余的代码和我的一模一样,运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多