Подтвердить что ты не робот

Исходное изображение iOS 7 (заставка) исчезает

В iOS 7 изображения запуска исчезают, а не сразу исчезают при загрузке приложения.

Есть ли какие-либо настройки, чтобы предотвратить появление этой анимации запуска? Мне нужно, чтобы он исчез сразу же, как в iOS 6 и ранее.

Отредактируйте для ответов:

Да, можно добавить всплывающее изображение в виде UIImageView в верхнее окно и скрыть его после завершения анимации затухания всплеска. Но это вызывает задержку в 0,4 секунды, которую я пытаюсь избежать.

4b9b3361

Ответ 1

Мне удалось сделать это в AppController. Просто разместите этот код сразу после создания glView

    UIImage* image = [UIImage imageNamed:[self getLaunchImageName]];
if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)])
{
    float screenScale = [[UIScreen mainScreen] scale];
    if (screenScale > 1.)
        image = [UIImage imageWithCGImage:image.CGImage scale:screenScale orientation:image.imageOrientation];
}
UIImageView *splashView = [[UIImageView alloc] initWithImage:image];
[viewController.view addSubview:splashView];
[splashView performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0.1f];

Это легко. Просто получите изображение запуска и заставьте его исчезнуть после задержки. Вам понадобится код getLaunchImage (на основе этого комментария, не протестированный с iPhone 6 и 6 плюс)

    -(NSString*)getLaunchImageName
{

    NSArray* images= @[@"LaunchImage.png",
                       @"[email protected]",
                       @"[email protected]",
                       @"[email protected]",
                       @"[email protected]",
                       @"[email protected]~ipad.png",
                       @"[email protected]~ipad.png",
                       @"LaunchImage-700-Portrait~ipad.png",
                       @"LaunchImage-Portrait~ipad.png",
                       @"[email protected]~ipad.png",
                       @"[email protected]~ipad.png",
                       @"LaunchImage-Landscape~ipad.png",
                       @"LaunchImage-700-Landscape~ipad.png",
                       @"[email protected]",
                       @"[email protected]",
                       @"[email protected]",
                       ];

    UIImage *splashImage;

    if ([self isDeviceiPhone])
    {
        if ([self isDeviceiPhone4] && [self isDeviceRetina])
        {
            splashImage = [UIImage imageNamed:images[1]];
            if (splashImage.size.width!=0)
                return images[1];
            else
                return images[2];
        }
        else if ([self isDeviceiPhone5])
        {
            splashImage = [UIImage imageNamed:images[1]];
            if (splashImage.size.width!=0)
                return images[3];
            else
                return images[4];
        }
        else if ([self isDeviceiPhone6])
        {
            splashImage = [UIImage imageNamed:images[1]];
            if (splashImage.size.width!=0)
                return images[13];
            else
                return images[14];
        }
        else
            return images[0]; //Non-retina iPhone
    }
    else if ([[UIDevice currentDevice] orientation]==UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown)//iPad Portrait
    {
        if ([self isDeviceRetina])
        {
            splashImage = [UIImage imageNamed:images[5]];
            if (splashImage.size.width!=0)
                return images[5];
            else
                return images[6];
        }
        else
        {
            splashImage = [UIImage imageNamed:images[7]];
            if (splashImage.size.width!=0)
                return images[7];
            else
                return images[8];
        }

    }
    else
    {
        if ([self isDeviceRetina])
        {
            splashImage = [UIImage imageNamed:images[9]];
            if (splashImage.size.width!=0)
                return images[9];
            else
                return images[10];
        }
        else
        {
            splashImage = [UIImage imageNamed:images[11]];
            if (splashImage.size.width!=0)
                return images[11];
            else
                return images[12];
        }
    }
}

-(BOOL)isDeviceiPhone
{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        return TRUE;
    }

    return FALSE;
}

-(BOOL)isDeviceiPhone4
{
    if ([[UIScreen mainScreen] bounds].size.height==480)
        return TRUE;

    return FALSE;
}


-(BOOL)isDeviceRetina
{
    if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
        ([UIScreen mainScreen].scale == 2.0))        // Retina display
    {
        return TRUE;
    }
    else                                          // non-Retina display
    {
        return FALSE;
    }
}


-(BOOL)isDeviceiPhone5
{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && [[UIScreen mainScreen] bounds].size.height==568)
    {
        return TRUE;
    }
    return FALSE;
}

-(BOOL)isDeviceiPhone6
{
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone && [[UIScreen mainScreen] bounds].size.height>568)
    {
        return TRUE;
    }
    return FALSE;
}

Ответ 2

В iOS 7 заставка затухания переходит из всплывающего изображения в ваш первый UIView. Если этот UIView похож на заставку, вы не видите затухания. Проблема в том, что исходный вид Cocos2D является чисто черным.

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

В CCDirectorIOS (или вашем подклассе):

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_WIDESCREEN (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height > 567.0f)
static const NSInteger tempSplashViewTag = 87624;

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    NSString *spriteName = IS_IPAD ? @"Default-Landscape" : IS_WIDESCREEN ? @"Default-568h" : @"Default";
    UIImageView *splashView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:spriteName]];
    splashView.tag = tempSplashViewTag; 
    [self.view addSubview:splashView];

    [self startAnimation];
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        UIView *splashView = [self.view viewWithTag:tempSplashViewTag];
        [splashView removeFromSuperview];
    });
}

Ответ 3

У меня была такая же проблема с разработкой приложения с Cocos2D-x и с моим главным окном и содержимым OpenGL в

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

Вместо этого я переместил его в метод

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

и теперь он больше не "исчезает". Обратите внимание, что будет вместо сделал. Однако этот метод доступен на iOS6 и выше, поэтому, если вы хотите, чтобы ваше приложение было совместимо с iOS5.x и ниже, вы можете просто выполнить проверку версии препроцессора для < __IPHONE_6_0 и использовать метод "didFinishLaunching", так как это даже не проблема.

Ответ 4

Если это действительно ваш код, у вас, вероятно, есть опечатка в имени изображения. (Если нет, сообщите нам, что означает "не работает".)

Кроме того, всплывающий экран обычно не подходит для каждого приложенияDidBecomeActive:. didFinishLaunchingWithOptions: это время, когда вы знаете, что вы были запущены, и заставка была показана от вашего имени.

-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [UIView animateWithDuration:0.2
                          delay:0
                        options: UIViewAnimationCurveEaseIn // change effect here.
                     animations:^{
                        self.window.viewForBaselineLayout.alpha = 0; // and at this alpha
                     }
                     completion:^(BOOL finished){
                     }];

    return YES;
}

Ответ 5

Я просто хотел подтвердить ответ Патрика, касающийся приложений Cocos2D, и добавить еще несколько деталей.

Поведение действительно легко увидеть, если вы переключаетесь между симулятором 6.1 и симулятором 7.x - первый делает мгновенный переключатель (возможно, с черной вспышкой по той же причине), в то время как симулятор 7.x делает медленное и раздражающее затухание до черного, а затем мигает в вашей сценке Cocos2D.

Если вы не хотите изменять или подклассифицировать материал CCDirector, вы также можете использовать его тот же код, чтобы изменить AppDelegate. В нашем случае было довольно просто:

  • В appDidFinishLaunching... мы подождем, пока не будет создан glView, а затем добавим UIImage в качестве подпрограммы к нему;
  • Затем мы создаем процедуру "postDidFinish..." и выполняем функцию Select, чтобы вызвать ее через 0,1 секунды или около того. В этом случае вы можете удалитьFromSubview, используя тот же код.

Это не так элегантно и невидимо, как дополнение к классу CCDirector, но довольно легко войти в быстрое исправление!

Ответ 6

Я подозреваю, что здесь происходит больше. Поместите некоторые операторы регистрации в начале цикла приложения, так как появляется экран заставки при вызове методов делегирования приложений, войдите в систему и при необходимости используйте инструменты, чтобы узнать, что происходит в момент запуска. Также попробуйте завершить многозадачность в приложении перед повторным запуском, чтобы убедиться, что это имеет значение, а также попробуйте новое, пустое приложение, чтобы узнать, является ли опыт одинаковым. Вы не указали, что приложение делает при запуске, но есть ли какая-либо анимация, которую вы закодировали, чтобы повлиять на затухание или выход после запуска?