Оверлей SKScene не отображается

Я пытаюсь наложить SKScene на SCNScene. Когда я запускаю свое приложение на симуляторе и iPhone6+, overlayScene (SKScene) отображается, как и предполагалось, но когда я пытался запустить его на iPhone5 (попробовал 2 разных устройства), overlayScene не появляется.

Кто-нибудь знает, почему? Оба устройства работают на iOS 9.2.1. Я тестировал приложение только на этих двух моделях. Вот мой код внутри GameViewController.Swift

    //Configure the view
    sceneView = self.view as? SCNView

    //Configure the scene
    sceneView.scene = gameScene
    sceneView.playing = true
    sceneView.backgroundColor = UIColor.blackColor()
    sceneView.antialiasingMode = SCNAntialiasingMode.Multisampling4X

    let overlayScene = OverlayScene(size: self.view.bounds.size)
    sceneView.overlaySKScene = overlayScene

Спасибо!


person Joepoe    schedule 11.03.2016    source источник
comment
То же самое здесь — нормально отображается на iPhone 6, 6 Plus, 6S и всех iPad, но не на iPhone 4S или iPhone 5.   -  person StephenT    schedule 02.06.2016
comment
Возможно, это связано с этим: forums.developer.apple.com/thread/23820   -  person StephenT    schedule 02.06.2016
comment
Вот такая же проблема, кто-нибудь уже решил?   -  person Ali Jawad    schedule 11.06.2016


Ответы (1)


Я получил это решение на форуме разработчиков, упомянутом @StephenT выше, но я подумал, что какой-то код может помочь.

В коде запаса/шаблона, предоставленном Xcode, Storyboard указывает представление верхнего уровня как SKView, и что начальный SCNScene должен быть добавлен к нему через объект SCNView. Это означало, что когда я добавил SKView в SCNScene, у меня возникла проблема, из-за которой SKView не отображался ни на одном устройстве, использующем OpenGL (в отличие от Metal).

Итак, решение, которое работает для меня:

Main.storyboard -> ViewController -> view

должен быть установлен как SCNView, а не как SKView.

Затем в ViewController:

- (void) viewDidLoad {
    [super viewDidLoad];

    // Configure the root view.
    //
    SCNView *scnView = (SCNView*)self.view;

    WorldSceneView *world = [[WorldSceneView alloc] initWithFrame:self.view.frame];

    // Create and configure the scene.
    //
    HUDScene *hudScene = [HUDScene hudSceneWithSize:scnView.bounds.size andHUDDelegate:world];

    // Associate the HUD SKScene with the SCNView.
    //    
    world.overlaySKScene = hudScene;

    [scnView addSubview:world];
}

Это работает для меня как на устройствах Metal и OpenGL, так и на симуляторе.

person PKCLsoft    schedule 06.08.2016