我在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中的动画?
答案 0 :(得分:1)
在删除视图之前,您需要强制完成动画。您可以通过为终点创建新动画来实现。设置一个非常短的持续时间,并确保使用+setAnimationBeginsFromCurrentState:
方法从当前状态开始
my answer to an old question可以找到更长的答案。
答案 1 :(得分:0)
在splashView = nil
[splashView release]
或致电[splashView.layer removeAllAnimations]