2012-06-09 33 views
1

因此,我知道Default.png可以用於iPhone應用程序中的啓動畫面,但我覺得它看起來不專業,因爲應用程序加載完成後沒有動畫。使用Storyboard延遲的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_方式,即故事板存在不會使代碼過時的事實。 – 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; 
}