Черный экран при запуске приложения ПОСЛЕ использования раскадровки только в iPhone 11 года - PullRequest
3 голосов
/ 28 апреля 2020

Если я не использую раскадровку на экране запуска, приложение будет работать на iPhone 11 / iPhone XS Max и др. c., Хотя и на почтовых ящиках, которые мне не нужны.

Когда я использую раскадровку экрана запуска, отображается экран запуска, затем экран становится черным. Это часть кода, который он использует.

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Init the window
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
        [CCDirector setDirectorType:kCCDirectorTypeDefault];

    CCDirector *director = [CCDirector sharedDirector];

    // Init the View Controller
    viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    viewController.wantsFullScreenLayout = YES;
       // Set RootViewController to window
       self.window.rootViewController = viewController;
    EAGLView *glView = [EAGLView viewWithFrame:[window bounds]
                                   pixelFormat:kEAGLColorFormatRGB565   // kEAGLColorFormatRGBA8
                                   depthFormat:0                        // GL_DEPTH_COMPONENT16_OES
                        ];

    // attach the openglView to the director
    [director setOpenGLView:glView];

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        //  // Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices
        if( ! [director enableRetinaDisplay:YES] )
            CCLOG(@"Retina Display Not supported");

    }

#if GAME_AUTOROTATION == kGameAutorotationUIViewController
    [director setDeviceOrientation:kCCDeviceOrientationPortrait];
#else
    [director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft];
#endif

    [director setAnimationInterval:1.0/60];
    // make the OpenGLView a child of the view controller
    [viewController setView:glView];
    // make the View Controller a child of the main window
    [window addSubview: viewController.view];
    [window makeKeyAndVisible];

    // Default texture format for PNG/BMP/TIFF/JPEG/GIF images
    // It can be RGBA8888, RGBA4444, RGB5_A1, RGB565
    // You can change anytime.
    [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];
    // Removes the startup flicker
    [self removeStartupFlicker];
    self.window.rootViewController = self.viewController;
    // Run the intro Scene
    [[CCDirector sharedDirector] runWithScene: [MainMenuScene scene]];


    return YES;
}

1 Ответ

0 голосов
/ 02 мая 2020

Вы, вероятно, используете iOS 13 на iPhone 11? Вам нужно только настроить главное окно и rootViewController, если приложение запускается на устройстве с iOS 12 или более ранней версией. При iOS 13 не устанавливайте главное окно и rootViewController.

Вы должны проверить это во время выполнения. Что-то вроде:

if (@available(iOS 13, *)) {
    // don't set up main window and rootViewController

} else {  // iOS 12 and below

    // Init the window
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Init the View Controller
    viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    viewController.wantsFullScreenLayout = YES;

    // Set RootViewController to window
    self.window.rootViewController = viewController;

}

Но тогда, почему он раньше работал на iPhone 11? (когда вы не использовали раскадровку экрана запуска, и она работала в режиме почтового ящика). Я подозреваю, что это потому, что без раскадровки экрана запуска он работал в режиме совместимости, поэтому не использовал iOS 13 sdk. И после того, как вы добавили раскадровку экрана запуска, она использует iOS 13 sdk, и вам не нужно настраивать главное окно и rootViewController.

...