2012-06-09 2 views
1

Итак, я знаю, что Default.png может использоваться для заставки в приложении для iPhone, но я считаю, что это выглядит непрофессионально, потому что после завершения загрузки приложения нет анимации.Заставка экрана в приложении iPhone с помощью раскадровки с задержкой

Так что я пытаюсь добавить заставку, которая будет исчезать, а затем перейти к последнему предыдущему виду.

Большинство примеров в Интернете, как правило, основаны на старом способе делать вещи с помощью addSubview. Как я могу добавить это в свое приложение для раскадровки.

Текущий код (тайминги неправильно, потому что я не был уверен, что он работал изначально)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    splashView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default2.png"]]; 
    splashView.frame = CGRectMake(0, 0, 324, 480); 
    [_window addSubview:splashView]; 
    [_window bringSubviewToFront:splashView]; 
    [_window makeKeyAndVisible]; 

    [self performSelector:@selector(removeSplash) withObject:nil afterDelay:1500.2]; 
    return YES; 
} 

-(void)removeSplash; 
{ 
    [UIView animateWithDuration:1.0 animations:^{self.splashView.alpha = 0.0;} completion:^(BOOL finished){ [splashView removeFromSuperview]; }]; 
    [splashScreen release]; 
} 
+0

+1 потому что я думаю, что есть большой пробел в широко понятых и принятых шаблонах для экранов заставки и опыта использования в первый раз. Это был пробел перед раскадрой. Раскалывание является большим улучшением для большинства приложений, но для запуска и первого запуска времени, я думаю, что они только путают вопросы дальше. – danh

+0

Заставка должна выглядеть как первый экран вашего приложения, но пустой, тогда переход в значительной степени безупречен, когда он закончит загрузку. Я ** СИЛЬНО ** не согласен, когда вы говорите, что он выглядит непрофессиональным (если вы не делаете это неправильно, конечно). Кроме того, это не _old_ способ сделать это, это просто _another_ way, тот факт, что существуют раскадровки, не делает код устаревшим. – EmilioPelaez

ответ

1

В вашем случае я бы еще добавить его как подвид, но всегда держать его в качестве верхнего подвид на окне , Когда он будет alpha == 0, он перестанет получать прикосновения. Поэтому нет причин выпускать его каждый раз, когда вы хотите его погасить.

В моем случае - клиент хотел, чтобы увидеть заставку каждый раз, когда приложение развернуто или открыто, так что я также сделал это:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    extraSplashScreen.alpha = 1; //when it goes in background - set splash screen visible. 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    [self fadeOutSplash]; //initiate fade out. 
} 

Моей fadeOutSplash функции выглядит следующим образом (на всяком случае):

- (void)fadeOutSplash 
{ 
    [UIView beginAnimations:nil context:NULL]; 

    [UIView setAnimationDelegate:self]; 

    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 

    [UIView setAnimationDuration:0.3]; 

    [UIView setAnimationDelay:0.5]; 

    extraSplashScreen.alpha = 0; 

    [UIView commitAnimations]; 
} 

Надеюсь, что это поможет.

3

Кроме ответа Guntis Treulands У меня есть другой способ сделать это без перемещения кода анимации из метода - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions.

Просто добавьте свой splashView непосредственно к _window.rootViewController.view.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIImage *splashImage = [UIImage autoAdjustImageNamed:@"Default.png"]; 
    UIImageView *splashImageView = [[UIImageView alloc] initWithImage:splashImage]; 
    [self.window.rootViewController.view addSubview:splashImageView]; 
    [self.window.rootViewController.view bringSubviewToFront:splashImageView]; 
    [UIView animateWithDuration:1.5f 
          delay:2.0f 
         options:UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         splashImageView.alpha = .0f; 
         CGFloat x = -60.0f; 
         CGFloat y = -120.0f; 
         splashImageView.frame = CGRectMake(x, 
                  y, 
                  splashImageView.frame.size.width-2*x, 
                  splashImageView.frame.size.height-2*y); 
        } completion:^(BOOL finished){ 
         if (finished) { 
          [splashImageView removeFromSuperview]; 
         } 
        }]; 

    return YES; 
} 
Смежные вопросы