iOS7:如何等待requestInterstitialAdPresentation完成(iOS7:

2019-10-20 23:34发布

我已经实现我的视图控制器(经由协议),它自己的比赛引擎调用呈现间质性广告上的方法。

我想,以防止控制回路返回到调用者,同时全屏广告是在玩,而不会影响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]];
        }
    }
}

Answer 1:

上面的代码不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方法,你把你的代码中遵循块行动,打击在节点中的观点,这样你就不必担心“时,广告已经不见了,做到这一点位的代码”。

如果任何人有任何的改进 - 请广告。 我已经有意不包含额外的代码,我只推出全屏广告每三分钟 - 很容易做到。



文章来源: iOS7: How to wait for requestInterstitialAdPresentation to finish