IOS:UIViewImage setAlpha问题

时间:2011-08-09 14:21:08

标签: ios xcode uiimageview

我有这段代码:

当图像从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];}

1 个答案:

答案 0 :(得分:3)

两个动画都在相同的运行周期中运行(这就是UIView动画的工作原理 - 一个运行周期中的所有动画都是“连接”。你需要使用

[UIView setAnimationDelay:3.0];

在第二个动画上。

<小时/> 示例代码
有两种方法可以做到这一点 - 使用标准的开始/提交动画,或使用块方法。此示例使用开始/提交动画代码,这是您拥有的代码。问题是因为动画正在连接,并且没有进入CA,标准动画行为是“强制”在另一个运行之前结束。它与运行循环有关;来自WWDC 2010构建动画驱动的界面深入探讨了这一点。但是做你想做的事的代码看起来像这样:

- (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;}];
}

希望这有帮助!