重新加载SKScene或View以在In App Purchase后删除iAd

在“应用内购买”后,我已经成功从我的Sprite Kit游戏中移除了iAds,但问题是应用程序需要重新启动才能停止展示广告。

这使我相信,视图或场景需要刷新/重新加载(我已经尝试了很多方法),让iAds在In App Purchase之后消失。

In App Purchase是在一个名为PurchasedViewController的单独的类中进行的,我以模态方式呈现。

目前,我试图在购买已经回到根视图控制器后发送通知。

这是我的代码:

ViewController.m

#import "ViewController.h" #import "Intro.h" #import "PurchasedViewController.h" #import <iAd/iAd.h> #import "InAppManager.h" @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reload) name:@"reloadIntro" object:nil]; // Configure the view. SKView * skView = (SKView *)self.view; // Create and configure the scene. SKScene *scene = [Intro sceneWithSize:skView.bounds.size]; scene.scaleMode = SKSceneScaleModeAspectFill; // Present the scene [skView presentScene:scene]; } -(void)reload { // Reload the View/Scene to remove iAds ..... } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; //Display iAds if ( [[InAppManager sharedManager] isFeature1PurchasedAlready] == FALSE) { NSLog(@"iAds are showing"); ADBannerView *adView = [[ADBannerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 480, 320, 50)]; [self.view addSubview:adView]; } //Remove iAds else if ( [[InAppManager sharedManager] isFeature1PurchasedAlready] == TRUE) { NSLog(@"iAds have been removed"); ADBannerView *adView = [[ADBannerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 480, 320, 50)]; adView.hidden = YES; [adView removeFromSuperview]; } } 

PurchasedViewController.m

我不会在这里input很多In App Purchase代码,因为我知道这个代码很有用,而且我已经成功地删除了Chartboost的广告。

 -(void) unlockProduct1 { if ( [[InAppManager sharedManager] isFeature1PurchasedAlready] == NO) { NSLog(@"Product 1 was not bought yet"); [buyProduct1Button setBackgroundImage:[UIImage imageNamed:@"Remove_Ads"] forState:UIControlStateNormal]; } else { NSLog(@"Product 1 WAS bought"); [buyProduct1Button setBackgroundImage:[UIImage imageNamed:@"Purchased"] forState:UIControlStateNormal]; // Sending Notification to ViewController.m NSLog(@"Did Send notification reloadIntro"); [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadIntro" object:nil]; } } - (IBAction)dismissPurchasedVC:(UIButton *)sender { [self dismissModalViewControllerAnimated:YES]; } 

这不会删除iAd视图:

  //Remove iAds else if ( [[InAppManager sharedManager] isFeature1PurchasedAlready] == TRUE) { NSLog(@"iAds have been removed"); ADBannerView *adView = [[ADBannerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 480, 320, 50)]; adView.hidden = YES; [adView removeFromSuperview]; } 

它做了什么:它创build一个新的iAd视图,将其设置为隐藏,并将其从其超级视图中删除(它从来没有被添加到)。 iAd视图的实际“实时”实例不受此影响。

您需要对现有的iAd视图进行参考(伊娃):

 @implementation ViewController { ADBannerView* _adView; } 

在创build广告横幅视图时分配参考:

 _adView = [[ADBannerView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 480, 320, 50)]; [self.view addSubview:_adView]; 

稍后使用该参考来移除广告横幅视图:

 [_adView removeFromSuperview]; _adView = nil;