2016-03-10 40 views
0

我有一個Spritekit遊戲,我可以顯示iAds。我的問題是,當我在橫向模式下打開手機時,iAd橫幅不會伸展以達到屏幕邊界寬度。以下是代碼:風景模式下的Swift SpriteKit iAd

import SpriteKit 
    import UIKit 
import iAd 

class GameScene: SKScene, SKPhysicsContactDelegate, ADBannerViewDelegate { 

var adBannerView:ADBannerView = ADBannerView() 

    override func didMoveToView(view: SKView) { 
     loadAds() 
     self.adBannerView.hidden = true 
     .... 



func loadAds()->ADBannerView{ 
      //adBannerView = ADBannerView(frame: CGRect.zero) 


    adBannerView.center = CGPoint(x: view!.frame.size.width/2, y: view!.frame.size.height - 550) 
    adBannerView.delegate = self 

    self.view?.addSubview(adBannerView) 



    return adBannerView 



    } 
    func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) { 
    // banner.alpha = 0.0 
    //self.adBannerView.alpha = 0.0 
    print("Ad cannot load") 
    banner.alpha = 0.0 
    self.adBannerView.alpha = 0.0 
    self.adBannerView.hidden = true 
    //banner.alpha = 0.0 
    //self.adBannerView.alpha = 0.0 
} 
func bannerViewDidLoadAd(banner: ADBannerView!) { 
    print("ad did load.") 
    self.adBannerView.hidden = false 
} 

爲什麼在橫向模式下我的橫幅廣告不會自動伸展以達到屏幕尺寸寬度?

回答

1

儘量覆蓋場景的didChangeSize方法:

override func didChangeSize(oldSize: CGSize) { 
    super.didChangeSize(oldSize) 
    // your resizing code here 
} 

你需要重寫另一種方法在你GameViewController還有:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    let skView = self.view as! SKView 
    if let scene = skView.scene { 

     let scene = scene as! GameScene 
     if scene.size != self.view.bounds.size { 
      scene.size = self.view.bounds.size 
     } 
    } 
} 

當設備旋轉時,viewDidLayoutSubviews方法所謂的,這是你想要調整場景大小並調用你的遊戲邏輯的地方。

+0

不工作... viewDidLayoutSubviews()給我的錯誤:無法將類型'mygame.MainMenuScene'(0x10d0f8)的值轉換爲'mygame.GameScene'(0x10ce78)。你可以幫我嗎? – Swift1

+1

由於您只是更改場景大小,因此您可以繼續並刪除'as! GameScene」。 – mfessenden

+0

有了這個編輯我的場景它是太多拉伸......我無法開始遊戲...... – Swift1

0

我試着用這個代碼Display an iAd banner in landscape in swift & spritekit

let screenBounds: CGRect = UIScreen.mainScreen().bounds 

    var adBannerView: ADBannerView 
    adBannerView = ADBannerView(frame: CGRectMake(0, 0, 50, screenBounds.width)) 
    adBannerView.center = CGPoint(x: screenBounds.width/2, y: screenBounds.height-adBannerView.frame.height) 
    adBannerView.delegate = self 
    adBannerView.hidden = true 
    view.addSubview(adBannerView) 

iAd的工作完全在橫向模式下的模擬器,而是給予同樣的問題在我的iPhone ...爲什麼?

1

我在GitHub上有一個幫手,你可以查看。 https://github.com/crashoverride777/Swift2-iAds-AdMob-CustomAds-Helper

基本上我要做的就是改變我的廣告在這個方法中的viewController

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) 

    coordinator.animateAlongsideTransition({ (UIViewControllerTransitionCoordinatorContext) -> Void in 



     let orientation = UIApplication.sharedApplication().statusBarOrientation 
     switch orientation { 
     case .Portrait: 
     print("Portrait") 
      // Do something 
     default: 
     print("Anything But Portrait") 
      // Do something else 
     } 

     }, completion: { (UIViewControllerTransitionCoordinatorContext) -> Void in 
      print("Device rotation completed") 
    }) 
} 

調用此方法在屏幕上旋轉,我用它來更新我的廣告尺寸。

這有幫助嗎?

+0

似乎有趣...問題是我的項目沒有任何viewController ...只有一個GameViewController,一個MainMenuScene和GameScene ...我如何嘗試適合你的例子到我的項目? – Swift1

+1

gameView控制器是一個UIviewController – crashoverride777

+0

你的想法讓我有機會實現一個全新的簡單方法。我剛剛刪除了我之前的所有代碼,並簡單地在GameViewController的viewDidLoad中添加了這一行:canDisplayBannerAds = true。廣告現在可以在縱向和橫向模式下正確顯示。唯一的小問題是,我不能改變橫幅的位置......但我改變了我的場景的一些元素,與我的新橫幅共存... – Swift1