iOS 9 中的 SpriteKit SKView 不再在场景之间转换
SpriteKit SKView no longer transitions between scenes in iOS 9
我们有一个代码库是在 2013 年编写和发布的,但是在 iOS 9 中,当 presentScene:transition:
消息发送到时,应用程序不再在 SKScene
秒之间明显转换我们的SKView
。 SKScene
收到 didMoveToView:
消息,但场景本身从未在屏幕上显示。
这是我们尝试过的:
- 通过
Info.plist
禁用 Metal
- 使用
[SKTransition transitionWithCIFilter:duration:]
而不是预定义的动画
- 调整
zPosition
- 切换到常规
UIView
动画(这让我们的 SKNode
消失了)
- 确保转换方法不会被多次调用
- 在
SKTransition
上将 pausesOutgoingScene
显式设置为 YES
None 以上尝试解决了问题。 请注意,在 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;
}
关于如何 locate/fix/workaround 这个错误有什么建议吗?
iOS9 在子视图中呈现带有过渡的场景时存在错误。
我遇到了同样的问题,在我的控制器中,我可以通过更改 viewWillLayoutSubviews 中的以下代码来解决此问题:
[self.subview presentScene:self.scene];
[self.view addSubview:self.subview];
对此:
[((SKView *)self.view) presentScene:self.scene];
如果场景必须保留在子视图中,另一种解决方法是使用没有过渡的 presentScene,这确实有效。
我们无法让 SKTransition
工作。我们与开发人员支持团队进行了交谈,在开发人员论坛上发帖,并尝试了此处发布的所有内容。
这是 iOS 9 独有的 SpriteKit 错误。如果其他人在 iOS 9 上遇到此错误,我们将切换到使用 UIView animateWithDuration:animations:completion:
的自定义转换。
有点晚了,但 可能值得探索。
据我所知,我有一个 UIViewController 在没有被完全释放的情况下四处浮动,它上面有一个 SKView。
唯一的 SKView 的副作用是 presentScene(transition)
没有工作,正如您所经历的那样。
我们有一个代码库是在 2013 年编写和发布的,但是在 iOS 9 中,当 presentScene:transition:
消息发送到时,应用程序不再在 SKScene
秒之间明显转换我们的SKView
。 SKScene
收到 didMoveToView:
消息,但场景本身从未在屏幕上显示。
这是我们尝试过的:
- 通过
Info.plist
禁用 - 使用
[SKTransition transitionWithCIFilter:duration:]
而不是预定义的动画 - 调整
zPosition
- 切换到常规
UIView
动画(这让我们的SKNode
消失了) - 确保转换方法不会被多次调用
- 在
SKTransition
上将
Metal
pausesOutgoingScene
显式设置为 YES
None 以上尝试解决了问题。 请注意,在 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;
}
关于如何 locate/fix/workaround 这个错误有什么建议吗?
iOS9 在子视图中呈现带有过渡的场景时存在错误。
我遇到了同样的问题,在我的控制器中,我可以通过更改 viewWillLayoutSubviews 中的以下代码来解决此问题:
[self.subview presentScene:self.scene];
[self.view addSubview:self.subview];
对此:
[((SKView *)self.view) presentScene:self.scene];
如果场景必须保留在子视图中,另一种解决方法是使用没有过渡的 presentScene,这确实有效。
我们无法让 SKTransition
工作。我们与开发人员支持团队进行了交谈,在开发人员论坛上发帖,并尝试了此处发布的所有内容。
这是 iOS 9 独有的 SpriteKit 错误。如果其他人在 iOS 9 上遇到此错误,我们将切换到使用 UIView animateWithDuration:animations:completion:
的自定义转换。
有点晚了,但
据我所知,我有一个 UIViewController 在没有被完全释放的情况下四处浮动,它上面有一个 SKView。
唯一的 SKView 的副作用是 presentScene(transition)
没有工作,正如您所经历的那样。