答案 0 :(得分:1)
同意这是一个SceneKit iOS 11问题 - 我不记得在iOS 11之前版本的iPad上看到这个问题。
请注意,这似乎不是iPhone的问题,只有iPad(可能只是iPad Air 2 - 因为这是我拥有的唯一物理iPad设备)。
我已经能够确认存在:在某些情况下,与真正的iPad(而不是模拟器)不兼容。我还没有完全弄清楚具体的场景(也许只有当你在场景中添加一个场景时才会这样做。)
我推荐的解决方案是不使用present:with(可能使用相机/灯光来模拟转换,这就是我正在做的“淡入”转换)。您不需要使用礼物:通过过渡来呈现您的场景。
例如,如果您从原始Apple SceneKit模板开始,它就可以工作。另外,您可以添加以下代码,它仍然有效。但是然后添加一个楼层,它失败了。
添加礼物:with(在scnView.scene = scene之后直接添加)
let sceneTransition = SKTransition.fade(withDuration: 4.0)
scnView.present(scene,
with: sceneTransition,
incomingPointOfView: nil,
completionHandler: nil)
注意:您必须在文件顶部添加“import SpriteKit”以支持SKTransition。如果没有“ship.scn”中的“floor”元素,我的iPad Air 2上的转换代码不会失败(虽然它似乎没有做任何事情)。
但是当你将一个空的“floor”元素拖到“ship.scn”场景中并重新运行时,它会因上面提到的错误而失败。
然后,注释掉现在:用代码,它再次起作用。
请注意,模拟器上的不失败,但它在我的设备上失败了。我已将iPad Air 2更新到最新的iOS(11.1),并将部署目标设置为相同。
此外,目前:确实可以在iOS 11.1的iPhone 6s上运行。所以这似乎只是一个iPad问题。