我已经实现我的视图控制器(经由协议),它自己的比赛引擎调用呈现间质性广告上的方法。
我想,以防止控制回路返回到调用者,同时全屏广告是在玩,而不会影响SKScene对象发生的,而广告清理和处理延迟的后续动画。
我已用下面的代码,它检查是否一个广告将被呈现,并且块不再被显示的当前线程,直到广告实现这一点,所述视图不卸载该广告。 (如果没有解雇检查,我的转变似乎太早影响)。
我知道的iAD模型在iOS7简单,没有必要实施代表等,但是,什么是等待插页式广告在iOS7完成正确的方式。 (请注意,我用SpriteKit,不是故事板)。 我是否能够恢复到使用iOS6的或更少风格的代表?
-(void)presentFullScreenAd
{
if( [self requestInterstitialAdPresentation] )
{
while( self.isPresentingFullScreenAd || self.isBeingDismissed )
{
// wait till we have finished before continuing
[NSRunLoop.currentRunLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]];
}
}
}
上面的代码不iOS8上(模拟器中在iPhone上4S测试)工作,它将无限循环。 所以我不得不去改变它。
这是不完美的,仍然有位转换之间的跳跃,但少哈克。
首先,在视图控制器,创建一个辅助方法来暂停和取消暂停当前SKView
-(void)pauseCurrentSKView:(bool)paused
{
if( [self.view isKindOfClass:[SKView class] ] )
{
SKView* pView = (SKView*)self.view;
pView.paused = paused;
}
}
然后让你的全屏广告法立即但取消暂停暂停的观点,如果广告没有显示。 稍后您将取消暂停。
-(void)presentFullScreenAd
{
// pause ASAP - requestInterstitialAdPresentation may take some time
// so you need to pause before your transitions kick in.
[self pauseCurrentSKView:YES];
if( [self requestInterstitialAdPresentation]==NO )
{
[self pauseCurrentSKView:NO];
}
}
当你的看法回来发挥作用,然后处理 - 和恢复动画。
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if( self.isPresentingFullScreenAd )
{
// we are about to stop presenting full screen ads
[self pauseCurrentSKView:NO];
}
else
{
// we are presenting the normal view or the full screen ad
}
}
关键是要确保你打电话后presentFullScreenAd
方法,你把你的代码中遵循块行动,打击在节点中的观点,这样你就不必担心“时,广告已经不见了,做到这一点位的代码”。
如果任何人有任何的改进 - 请广告。 我已经有意不包含额外的代码,我只推出全屏广告每三分钟 - 很容易做到。