2013-04-26 3 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 секунд. Второй + tap (s) он будет сидеть там в течение 10 секунд, затем перейти прозрачно для сердечного ритма, а затем снова вернуться в полностью непрозрачный.

Как я могу заставить его плавно анимировать каждый раз?

Заранее благодарен!

+0

Какую анимацию вы ожидаете на самом деле? При кратковременном нажатии вид должен медленно исчезать в течение 10 секунд. Как только его полностью исчезли, внезапно вы хотите сделать его видимым. Я прав? –

ответ

2

alpha значения находятся между 0.0f и 1.0f. Установка значения alpha в блоке завершения на 1.0f вместо 100.0f должна устранить проблему.

Поскольку значения больше, чем 1.0f все полностью непрозрачные, вы не будете видеть переход от 100.0f к 1.0f (99% анимации), так что эффективная продолжительность перехода от 1.0f к 0.0f бы только около 0,1 секунд вместо из 10 (не совсем, из-за кривой анимации, но вы получаете идею).

+0

ОК, теперь я чувствую себя идиотом - я думаю, это то, что я получаю для написания кода поздно ночью после долгого дня - и с пустым офисом. Переключение с 100.0f на 1.0f (о чем я уже знал). Работал. – visualjc

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? это делает то, что он ищет. –

+0

Будет лучше, если панель будет одобрять поданные голоса. Здесь люди без необходимости пользуются привилегией, которая кажется :( –

+0

Я ttraules - это то, что я собирался попробовать сегодня утром, - но на самом деле проблема заключалась в установке альфы до 100.0f против 1.0f. Спасибо, я дал вам голос:) – visualjc

Смежные вопросы