2013-04-26 93 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

相關問題