SpriteKit SKView不再在iOS 9中的场景之间转换

时间:2015-10-20 19:36:10

标签: ios objective-c sprite-kit core-animation ios9

我们有一个代码库是在2013年编写和发布的,但在iOS 9中,当SKScene消息发送到presentScene:transition:消息时,应用程序不再在SKView之间明显转换。 SKScene收到didMoveToView:消息,但场景本身从未在屏幕上显示。

以下是我们的尝试:

  • 通过Metal
  • 停用Info.plist
  • 使用[SKTransition transitionWithCIFilter:duration:]代替预定义的动画
  • 调整zPosition
  • 切换到常规UIView动画(这使我们的SKNode消失了)
  • 确保过渡方法不会被多次调用
  • pausesOutgoingScene
  • 上明确设置YESSKTransition

上述尝试都没有解决问题。 请注意,所有内容都在iOS 8中正常转换

以下是一些不起作用的示例代码:

-(BOOL)presentTitle {
    if (!titleSceneLoaded) {
        return NO;
    }
    [skView presentScene:titleScene transition:[SKTransition fadeWithDuration:1.0]];
    return YES;
}

将其更改为此可使其再次起作用(无过渡):

-(BOOL)presentTitle {
    if (!titleSceneLoaded) {
        return NO;
    }
    [skView presentScene:titleScene];
    return YES;
}

有关如何定位/修复/解决错误的任何建议?

2 个答案:

答案 0 :(得分:2)

iOS9中存在一个错误,在子视图中显示一个转换场景。

我遇到了同样的问题,在我的控制器中,我可以通过更改viewWillLayoutSubviews中的以下代码来解决此问题:

        [self.subview presentScene:self.scene];
        [self.view addSubview:self.subview];

到此:

        [((SKView *)self.view) presentScene:self.scene];

如果场景必须保持在子视图方法中,另一种解决方法是使用presentScene而不进行转换,这确实有效。

答案 1 :(得分:1)

我们无法让SKTransition工作。我们与在开发人员论坛上发布的开发人员支持团队进行了交谈,并尝试了在此发布的所有内容。

这是iOS 9独有的SpriteKit错误。如果其他人在iOS 9上遇到此错误,我们会使用UIView animateWithDuration:animations:completion:切换到自定义转换。