2013-04-26 103 views
0

我已经尝试了很多不同的选项,并查看了大约15堆栈的答案,我只是无法弄清楚这一点。UIView animateWithDuration没有运行第二次

该代码基本上试图淡出,然后弹出一个视图,每次轻敲发生时。它第一次正常工作,但不会在任何后续时间工作。

- (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秒时间段。第二个+轻拍(S)它将坐在那里10秒,然后透明的心跳,然后再回到完全不透明。

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

在此先感谢!

+0

你期望的动画是什么?轻拍时,视图应在10秒内缓慢淡出。一旦它完全消失,突然你想让它可见。我对吗? – 2013-04-26 05:07:47

回答

2

alpha值在0.0f1.0f之间。将完成块中的alpha值设置为1.0f而不是100.0f应解决该问题。

因为比1.0f较大的值都是完全不透明的,你不会看到100.0f1.0f(动画的99%)的过渡,所以从1.0f0.0f过渡的有效时间也只是约0.1秒,而不是10(不完全是因为动画曲线,但你明白了)。

+0

好吧,现在我觉得自己像一个白痴 - 我猜这就是我在漫长的一天后深夜写代码 - 而且办公室空空如也。从100.0f切换到1.0f(我已经知道)。工作。 – visualjc 2013-04-26 13:32:57

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

希望它有帮助!

+0

关注评论downvoter?这就是他想要的 – 2013-04-26 04:50:50

+0

如果在那里的小组批准倒票会更好。在这里人们不必要地使用它的特权似乎:( – 2013-04-26 05:10:34

+0

我ttraules - 这是我今天早上要尝试的 - 但真正的问题是设置为100.0f与1.0f的alpha。谢谢!我给了你一个投票: - ) – visualjc 2013-04-26 13:33:53

相关问题