неожиданная задержка между экраном-заставкой и контроллером первого представления

у меня есть приложение с вкладками. вот мой код

- (void)applicationDidFinishLaunching:(UIApplication *)application {
[application setStatusBarHidden:YES animated:NO];
[self showSplashView];
}
- (void)showSplashView {
//If i don't use black view it displays white screen thats look so bad...
   UIView* blackView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
blackView.backgroundColor = [UIColor blackColor];
[window addSubview:blackView]; // sends [blackView retain]
[blackView release];

splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    splashView.image = [UIImage imageNamed:@"MyImage.png"];
    [window addSubview:splashView];
    [window bringSubviewToFront:splashView];
    [UIView beginAnimations:nil context:nil ];
[UIView setAnimationDelay:5.0];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:window cache:YES];
   [UIView setAnimationDelegate:self];
   [UIView setAnimationDidStopSelector:@selector(startupAnimationDone:finished:context:) ];
   splashView.alpha = 0.0;
   splashView.frame = CGRectMake(-60, -60, 440, 600);

   [UIView commitAnimations];

  }
  - (void)startupAnimationDone:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
UIView* blackView = [[window subviews] objectAtIndex:0];
    [blackView removeFromSuperview];
    [splashView removeFromSuperview];
    [splashView release];
[window addSubview:tabBarController.view];
[window makeKeyWindow];
 }

поэтому моя проблема в том, что когда мое приложение запускается первым, оно отображает черный экран, а через несколько секунд отображает заставку. когда анимация заставки снова заканчивается, отображается черный экран, а через несколько секунд отображается мой контроллер представления. Я не знаю, почему это происходит. Надеюсь, мой вопрос понятен. спасибо EDIT Мое ожидаемое поведение - как только приложение запустится, оно должно отображать мой экран-заставку вместо черного экрана, и как только завершится анимация заставки, он должен отобразить мой первый контроллер представления (который является контроллером табличного представления с первым вкладка)..

EDIT 2: это что-то трудоемкое в этом коде [window addSubview:tabBarController.view]; как мне сделать этот процесс в фоновом режиме, пока работает мой экран-заставка.


person Nnp    schedule 23.02.2010    source источник
comment
Спасибо, Роб, я изменил свой вопрос. в коде нет ошибки, но я не получаю ожидаемого поведения. Я надеюсь, что теперь все ясно.   -  person Nnp    schedule 23.02.2010


Ответы (1)


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

Кроме того, у вас должен быть файл Default.png, напоминающий ваш первый экран. Тогда вам не нужно будет беспокоиться об этом blackView. Если вы действительно заинтересованы в этой анимации заставки, вы должны сделать Default.png похожим на первый кадр анимации.

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

person Rob Jones    schedule 23.02.2010
comment
спасибо, Роб, просто я видел много приложений с заставкой. и более того, это нужно моему клиенту.. - person Nnp; 23.02.2010
comment
я удалил черный вид и задержку анимации, но он по-прежнему показывает черный вид в начале, и мой экран исчезает без каких-либо задержек, и он отображает белый экран до того, как мой вид отобразится. Можете ли вы сказать мне, как мне подготовить свой вид, пока отображается всплеск. - person Nnp; 23.02.2010