0

我有一个 GLKViewController 子类实现,以 ADBannerView 作为子视图。广告加载并呈现得很好。OpenGL 应用程序也可以正常工作。当您单击广告时,会出现弹出窗口。GLKViewController 启用了默认的暂停辞职行为。

如果您在 GLKViewController 的 setPaused 上设置断点,您会注意到如果您在广告弹出窗口可见时切换离开您的应用(双击主页并选择另一个应用) ,则会调用 setPaused:NO。仅当 ADBannerView 弹出窗口可见时才会发生该行为,否则不会在您切换离开应用程序时发生。

即使是在 iOS 9.1 中由 Xcode 7 生成的默认 OpenGL 模板应用程序,我也能够重现上述行为。

1)这是正常的吗?

2) 对我来说,这会导致一致的可重现崩溃,因为在调用 setPaused:NO 之后,会重新绘制 GLKViewController,这会导致 OpenGL 操作在应用程序处于后台时发生。该应用程序此时(正确地)被杀死。

4

1 回答 1

1

我目前的解决方法是在应用程序不活动时放弃调用setPaused:NO如下。这似乎工作正常,但为什么会发生这种情况让我感到困惑。

- (void)setPaused:(BOOL)paused
{
    long appState = (long)[UIApplication sharedApplication].applicationState;
    if (!paused && (appState != 0)) {
        NSLog(@"setPaused - REJECTING Unpause; %ld", appState);
        return;
    }
    [super setPaused:paused];
}
于 2015-10-29T08:04:04.137 回答