我有这段代码:
当图像从0.00变为1.00时,它是固定的,而不是在3秒内,为什么?
- (void) startAnimation{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3];
[successView setAlpha:1.00];
[UIView commitAnimations];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:3];
[successView setAlpha:0.00];
[UIView commitAnimations];}
答案 0 :(得分:3)
两个动画都在相同的运行周期中运行(这就是UIView动画的工作原理 - 一个运行周期中的所有动画都是“连接”。你需要使用
[UIView setAnimationDelay:3.0];
在第二个动画上。
- (void)fadeOut {
[UIView beginAnimations:@"Animation2" context:NULL];
[UIView setAnimationDuration:3];
[self.testView setAlpha:0.00];
[UIView commitAnimations];
}
- (IBAction)animate {
[UIView beginAnimations:@"Animation1" context:NULL];
[UIView setAnimationDuration:3];
[self.testView setAlpha:1.00];
[UIView commitAnimations];
[self performSelector:@selector(fadeOut) withObject:nil afterDelay:3.0];
}
你必须强迫它打破运行循环,基本上。要记住的关键是动画不是按顺序执行的,正如您可能期望的那样。
基于块的代码如下所示。请注意,我正在使用autorepeat选项,它会自动重复动画。请注意,虽然在动画中,您正在设置属性,因此默认情况下,在动画完成后,视图将返回到可见状态。因此,您可以在完成块中将属性再次设置为零。
- (IBAction)animate {
[UIView transitionWithView:self.testView duration:3.0 options:UIViewAnimationOptionAutoreverse animations:^{self.testView.alpha = 1.0;} completion:^(BOOL finished) {self.testView.alpha = 0.0;}];
}
希望这有帮助!