2014-02-27 65 views
1

我在我的視圖控制器下面的代碼:網絡成癮者添加到雪碧套件景觀

- (void)viewWillLayoutSubviews { 
    [super viewWillLayoutSubviews]; 

    // Configure the view. 
    SKView * skView = (SKView *)self.view; 
    if (!skView.scene) { 
     skView.showsFPS = NO; 
     skView.showsNodeCount = NO; 
     skView.showsDrawCount = NO; 

     // Create and configure the scene. 
     SKScene * scene = [MenuScene sceneWithSize:skView.bounds.size]; 
     scene.scaleMode = SKSceneScaleModeAspectFill; 

     self.canDisplayBannerAds = YES; 

     // Present the scene. 
     [skView presentScene:scene]; 
    } 
} 

當我運行該應用程序會立即崩潰。我收到以下錯誤信息:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView scene]: unrecognized selector sent to instance 

我不能使用SKView *skView = (SKView *)self.originalContentView;因爲應用程序是在橫向模式。有沒有辦法在Landscap Sprite Kit遊戲中顯示iAds?

編輯:

我只是說此代碼視圖控制器,但我得到了相同的結果..

#pragma mark iAd Delegate Methods 

-(void)bannerViewDidLoadAd:(ADBannerView *)banner { 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1]; 
    [banner setAlpha:1]; 
    [UIView commitAnimations]; 
} 
+0

什麼崩潰說呢?它崩潰了什麼?如果報告的行位於main()中,則添加異常斷點。您實際上如何添加廣告橫幅視圖(僅啓用展示廣告的能力是不夠的)? – LearnCocos2D

+0

我將錯誤消息添加到了我的帖子中。不幸的是,我不知道如何添加廣告橫幅視圖。這適用於我的演示應用程序,但它是肖像。 – user2255273

+0

我剛剛用我認爲應該將廣告添加到視圖中的代碼編輯我的帖子,但我得到了相同的結果。 – user2255273

回答

3

我就遇到了這個問題,並通過創建一個ABBannerView財產和添加解決它作爲一個子視圖。

在我的ViewController類:

adView = [[ADBannerView alloc] initWithFrame:CGRectZero]; 
adView.delegate = self; 
[adView setFrame:CGRectMake(0, 0, 1024, 768)]; // set to your screen dimensions 
[self.view addSubview:adView]; 

重要的是不要將您的視圖控制器的canDisplayBannerAds財產。

我相信發生的事情是,如果您將canDisplayBannerAds屬性設置爲true,則該視圖會被修改並且不再與SKView兼容,並且不再具有場景屬性。

我確實要設置框架,以便尺寸正確,否則它是肖像。

+0

也許可以使用'initWithFrame'參數來設置框架。 – prototypical

+0

我有這種工作,但它告訴我使用'_adView'而不是'adView'。另外,如何使框架對iPhone 5或iPhone 4響應? – user2255273

+0

不知道你的意思是讓它響應iPhone 4或5.你是問如何檢測屏幕尺寸? – prototypical

1

您可以解決此問題,而無需手動配置廣告條幅。您仍然必須使用原始內容視圖,但要使其正確工作只是將所有內容放在視圖控制器生命週期的正確階段。你所要做的就是啓用canDisplayBannerAds:在awakeFromNib中。然後將您創建的SKView設置爲視圖控制器的視圖或originalContentView,具體取決於原始內容視圖的存在。

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    [self setCanDisplayBannerAds:YES]; 
} 

- (void)viewWillLayoutSubviews 
{ 
    [super viewWillLayoutSubviews]; 

    SKView *skView = nil; 

    if (self.originalContentView) { 
     skView = (SKView *)self.originalContentView; 
    }else{ 
     skView = (SKView *)self.view; 
    } 

    [skView setShowsDrawCount:YES]; 
    [skView setShowsFPS:YES]; 
    [skView setShowsNodeCount:YES]; 

    SKScene *scene = [MyScene sceneWithSize:skView.bounds.size]; 
    [scene setScaleMode:SKSceneScaleModeFill]; 

    [skView presentScene:scene]; 
} 
1

以上答案都不適用於我。下面的代碼在iOS 7和8中進行了測試,並且工作得很好。

添加以下行頭文件

#import <iAd/iAd.h> 

@interface GameViewController : UIViewController<ADBannerViewDelegate>{ 

    //iAd 
    ADBannerView *adView; 

} 

在實現文件的.m添加以下代碼

#import "GameViewController.h" 
#import "GameScene.h" 

@implementation GameViewController 

-(void)viewWillLayoutSubviews{ 

    [super viewWillLayoutSubviews]; 

    SKView *skView; 

    if (self.originalContentView) { 

     skView = (SKView *)self.originalContentView; 

    } 

    if (!skView.scene) { 

     //[skView setShowsDrawCount:YES]; 
     //[skView setShowsFPS:YES]; 
     //[skView setShowsNodeCount:YES]; 

     //Improve Performance 
     skView.ignoresSiblingOrder = YES; 

     GameScene *scene = [GameScene sceneWithSize:skView.bounds.size]; 
     [scene setScaleMode:SKSceneScaleModeFill]; 

     [skView presentScene:scene]; 

    } 

} 

- (void)awakeFromNib{ 

    [super awakeFromNib]; 

    CGRect screenRect = [[UIScreen mainScreen] bounds]; 

    adView = [[ADBannerView alloc] initWithFrame:CGRectZero]; 
    adView.frame = CGRectMake(0, 0, screenRect.size.width, adView.frame.size.height); 
    adView.delegate=self; 
    [self.view addSubview:adView]; 
} 

//iAd 
-(void)bannerViewDidLoadAd:(ADBannerView *)banner { 

    [adView setAlpha:1.0]; 
    NSLog(@"Show Ad"); 

} 

-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { 

    [adView setAlpha:0]; 
    NSLog(@"Hide Ad"); 

} 

// 

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     return UIInterfaceOrientationMaskAllButUpsideDown; 
    } else { 
     return UIInterfaceOrientationMaskAll; 
    } 
} 

-(BOOL)prefersStatusBarHidden{ 

    return YES; 

} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Release any cached data, images, etc that aren't in use. 
} 

@end