iphone启动画面多任务处理

时间:2011-02-22 10:53:34

标签: ios multitasking splash

我在iPhone上添加了一个淡入淡出的闪屏,代码如下

UIImageView *splashView;
..
..
..
splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0,20, 320, 460)];
splashView.image = [UIImage imageNamed:@"Default.png"];
[window addSubview:splashView];
[window bringSubviewToFront:splashView];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2.8];
[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 {
   [splashView removeFromSuperview];
   [splashView release];
}

这是一个旧的应用程序,我现在正在启用多任务处理。我有一个问题,如果应用程序关闭(通过主页按钮或锁定)我想取消动画。我已添加以下代码以在应用关闭时删除启动视图

-(void) applicationDidEnterBackground:(UIApplication *)application
   [splashView removeFromSuperview];
   [splashView release];
}

如果应用程序在启动画面动画完成之前关闭应用程序,因为在applicationDidEnterBackground中删除了启动画面,因此当调用startupAnimationDone时(在applicationDidEnterBackground之后),没有任何内容可以删除,因此它会崩溃。

有没有办法取消applicationDidEnterBackground中的动画?

2 个答案:

答案 0 :(得分:1)

在删除视图之前,您需要强制完成动画。您可以通过为终点创建新动画来实现。设置一个非常短的持续时间,并确保使用+setAnimationBeginsFromCurrentState:方法从当前状态开始

my answer to an old question可以找到更长的答案。

答案 1 :(得分:0)

splashView = nil

之后致电[splashView release]

或致电[splashView.layer removeAllAnimations]