【发布时间】: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