【问题标题】:iAd shows but doesn't react to tapsiAd 显示但对点击无反应
【发布时间】:2014-12-05 14:15:44
【问题描述】:

我正在用 Swift 中的SpriteKit 开发游戏。我想在我的游戏场景顶部显示iAd

iAd 显示,但是当我点击它时,它没有反应。什么都没有发生。

这是我的代码:

import UIKit

导入 SpriteKit 导入 iAd

类 GameViewController: UIViewController, ADBannerViewDelegate, BackToMenuDelegate {

var bannerView:ADBannerView =  ADBannerView()
var currentLevel:Int!

override func viewDidLoad() {
    super.viewDidLoad()
    // Configure the view.
    let skView = self.view as SKView
    skView.multipleTouchEnabled = false

    /* Set the scale mode to scale to fit the window */
    let gameScene = GameScene(size:skView.bounds.size)
    gameScene.scaleMode = .AspectFill
    gameScene.currentLevel = currentLevel
    gameScene.gameViewController = self
    skView.presentScene(gameScene)
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
}

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

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.
}

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

func bannerViewDidLoadAd(banner: ADBannerView!) {
    bannerView.hidden = false
}
func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool {
    return willLeave
}
func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
    bannerView.hidden = true
}
func loadAds(){
    bannerView.delegate = self
    bannerView.hidden = true

    var adRect = CGRectZero
    let contentFrame = self.view.bounds
    adRect.size = bannerView.sizeThatFits(contentFrame.size)
    adRect.origin.y = 0
    bannerView.frame = adRect

    self.view.addSubview(bannerView)
}
func backToMenu(){
    self.navigationController!.popToRootViewControllerAnimated(true)
    let skView = self.view as SKView
    skView.presentScene(nil)
}

func shareScore(score:Int){
    var objectsToShare = [AnyObject]()
    let textToShare = "I just got \(score) points in BlockCracker! Check out this App!"
    objectsToShare.append(textToShare)
    if let myWebsite = NSURL(string: "http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=611627312&mt=8")
    {
        objectsToShare.append(myWebsite)
    }
    let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
    activityVC.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList, UIActivityTypeAddToReadingList,UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard,UIActivityTypePostToFlickr,UIActivityTypePostToVimeo,UIActivityTypeMail,UIActivityTypeMessage]
    self.presentViewController(activityVC, animated: true, completion: nil)

}
override func viewDidDisappear(animated: Bool) {
    super.viewDidDisappear(animated)

}

}

【问题讨论】:

  • 可能是因为你的横幅视图有零帧:CGRect.zeroRect
  • 我删除了 (frame: CGRect.zeroRect) 但结果相同
  • 你需要设置一个框架。看我的回答。
  • 设置一个框架。并检查是否有除 iAd 框架之外的其他框架。
  • @David 我是 iOS 开发新手,你能告诉我代码吗?

标签: ios swift iad


【解决方案1】:

终于找到问题了。就在这里 func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool { return willLeave } 其中willLeave 默认为假!只需更改返回真实值即可。现在一切正常!

【讨论】:

    【解决方案2】:

    我认为问题在于您的横幅视图具有零帧(即CGRect.zeroRect),因此没有可点击区域。您必须设置适当的框架; sizeThatFits: 将帮助您获得适合当前窗口大小的横幅框架。 (Code adapted to Swift from this Obj-C answer.)

    func loadAds(){
        bannerView.delegate = self
        bannerView.hidden = true
    
        var adRect = CGRectZero
        let contentFrame = self.view.bounds
        adRect.size = bannerView.sizeThatFits(contentFrame.size)
        // adRect.origin.y = CGRectGetHeight(contentFrame) - CGRectGetHeight(adRect) <--bottom of screen
        adRect.origin.y = 0 // <-- top of screen
        bannerView.frame = adRect
    
        view.addSubview(bannerView)
    }
    

    【讨论】:

    • 我将您的代码复制到了我的应用中,但仍然没有任何反应。没有任何变化。
    • @user1951072 好的,然后发生了其他事情...实际上,当您将loadAds() 放入viewDidAppear 时会发生什么?有什么区别吗?
    • 如果我添加self.canDisplayBannerAds = true 它工作正常,但广告停留在屏幕底部。我想在屏幕顶部显示广告。我该怎么做?
    • 没有self.canDisplayBannerAds = true 没有任何变化,横幅显示,但没有反应。
    • 添加 self.canDisplayBannerAds = true 后,无论我设置什么位置,横幅仍位于屏幕底部且可点击。没有self.canDisplayBannerAds = true,则显示在顶部,但无法点击。
    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 2020-05-21
    • 2021-09-17
    • 2017-01-10
    相关资源
    最近更新 更多