UIView animateWithDuration没有第二次运行

时间:2013-04-26 04:08:19

标签: objective-c cocoa-touch

我尝试了很多不同的选项,并查看了大约15个堆栈答案,我只是无法解决这个问题。

代码基本上是试图淡出,然后每次点击发生时弹回一个视图。它第一次工作正常,但随后不会工作。

- (void)handleTap:(UIGestureRecognizer*)gestureRecognizer
{
    self.view.transform = CGAffineTransformIdentity;

    __block HelpScreenController* weakSelf = self;
    [UIView animateWithDuration:10
                      delay:0
                    options:UIViewAnimationOptionCurveEaseOut
                 animations:^(void) {
                     weakSelf.view.alpha = 0;
                 }
                 completion:^(BOOL finished) {
                     if (finished) {
                         weakSelf.view.alpha = 100.0f;
                         [weakSelf.view.layer removeAllAnimations];
                         [weakSelf.view setNeedsDisplay];
                     }
                 }];

}

它完美地运行第一次点击 - 它在10秒的时间内从不透明平滑过渡到完全透明。第二次敲击它会在那里坐10秒钟,然后为心脏跳动透明,然后再回到完全不透明状态。

我怎样才能让它每次都能流畅地制作动画?

提前致谢!

2 个答案:

答案 0 :(得分:2)

alpha值介于0.0f1.0f之间。将完成功能块中的alpha值设置为1.0f而不是100.0f可以解决问题。

因为大于1.0f的值都是完全不透明的,您将看不到从100.0f1.0f的过渡(动画的99%),因此过渡的有效持续时间从1.0f0.0f只需0.1秒而不是10秒(不完全是因为动画曲线,但你明白了。)

答案 1 :(得分:2)

您可以使用CABasicAnimation代替。尝试这样的事情:

- (void)handleTap:(UIGestureRecognizer*)gestureRecognizer
{
   CALayer *viewLayer = self.view.layer;
   [viewLayer removeAllAnimations];
   CABasicAnimation *fader = [CABasicAnimation animationWithKeyPath:@"opacity"];
   fader.fromValue = [NSNumber numberWithFloat:0.0];
   fader.toValue = [NSNumber numberWithFloat:1.0];
   fader.duration = 10;//change the duration and autoreverses option to fit with your look
   fader.autoreverses = YES;
   fader.repeatCount = 0;
   [viewLayer addAnimation:fader forKey:@"fadeAnimation"];
}

希望它有所帮助!