【问题标题】:SpriteKit SKView no longer transitions between scenes in iOS 9在 iOS 9 中,SpriteKit SKView 不再在场景之间切换
【发布时间】:2016-01-19 15:02:44
【问题描述】:

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

这是我们尝试过的:

  • 通过Info.plist 禁用Metal
  • 使用[SKTransition transitionWithCIFilter:duration:] 代替预定义的动画
  • 调整zPosition
  • 切换到常规的UIView 动画(这使我们的SKNodes 消失了)
  • 确保不会多次调用转换方法
  • SKTransition 上将pausesOutgoingScene 显式设置为YES

上述尝试均未解决此问题。 请注意,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;
}

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

【问题讨论】:

  • 您能用用于转换的代码更新您的问题吗?另外,“不过渡”是指您遇到错误还是根本没有发生任何事情?你确定代码被执行了吗?
  • @Whirlwind 感谢您的评论,我用这些细节更新了问题。代码肯定会执行(通过断点验证)。
  • 嗯,这绝对是奇怪的,因为它没有发生在 iOS8 上......但它不一定是一个错误......你是否尝试将 fadeWithDuration 设置为更高的值,比如说 5 和看看它是否像那样工作?根据这篇文章stackoverflow.com/a/24016057/3402095,如果场景(在您的情况下为 TitleScene)资源繁重,则可以跳过过渡的一部分......
  • 感谢@Whirlwind 的想法!即使我们增加SKTransition 持续时间,它仍然保留在前一个场景中,我尝试将其切换到其他一些SKTransition 工厂方法(包括自定义CIFilter 之一),它仍然保留在前一个场景中。 didMoveToView: 在新场景中被调用(甚至在你的建议之前)所以肯定会发生一些事情。

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


【解决方案1】:

iOS9 中存在一个错误,即在子视图中呈现带有过渡的场景。

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

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

到这里:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      有点晚了,但my own wrestling with what seems to be this bug 可能值得探索。

      我发现,我有一个浮动的 UIViewController 没有被完全释放,它上面有一个 SKView。

      该 SKView 仍然存在的唯一副作用是 presentScene(transition) 无法正常工作,正如您所经历的那样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-09
        • 2020-04-13
        • 2020-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多