iAd冻结游戏的场景

我正在开发一个使用SpriteKit的游戏。 我在现场的视图中显示了iAds。 当广告视图中的广告被触摸时,广告就会出现,但是如果我越过(X)/closures广告,则游戏中的场景被冻结。 当广告出现并消失时,我不会暂停现场或对事件做任何事情。 如果我再次触摸广告(现在这是第二次冻结的场景),并返回到现场,场景不冻结,一切都开始工作,因为他们假设(奇怪)。 我不知道iAd或我的应用程序中的问题在哪里?

// Method is called when the iAd is loaded. -(void)bannerViewDidLoadAd:(ADBannerView *)banner { NSLog(@"Banner did load"); [self animateAdBanner]; } -(void) animateAdBanner{ if(iAdsEnable){ [UIView animateWithDuration:6 delay:8 options:UIViewAnimationOptionAllowUserInteraction animations:^{ [self.adBanner setAlpha:0.85]; } completion:^(BOOL finished){ if(finished){ //[self.adBanner setAlpha:0.7]; } }]; } } 

根据苹果的ADBannerViewDelegate协议参考:

 bannerViewActionShouldBegin:willLeaveApplication: 

如果willLeave参数为YES,则在此方法返回后不久,应用程序将移至背景。 在这种情况下,您的方法实现不需要执行额外的工作。 如果将willLeave设置为NO,则触发的操作将覆盖您的应用程序的用户界面以显示广告操作。 虽然您的应用程序可以继续正常运行,但您执行此方法应禁用在执行操作时需要用户交互的活动。 例如, 游戏可能暂停其游戏直到用户完成观看广告。

基本上意味着当你的游戏被推入后台时,游戏会暂停。

代表有一个进一步的方法来通知你当横幅视图完成其行动:

 bannerViewActionDidFinish: 

讨论如果您的委托在允许某个操作运行之前暂停了活动,则应在该方法被调用时恢复这些活动。

看来你可以使用上面的委托方法来实现你自己的暂停/不停顿,或者你的场景中的NSNotification可以在你的应用分别进入后台和前台时暂停/不停顿。

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pause) name:UIApplicationWillResignActiveNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(unPause) name:UIApplicationWillEnterForegroundNotification object:nil]; 

来源: iAd框架参考和ADBannerViewDelegate协议参考