CABasicAnimation не запускается при добавлении анимации в слой, который не отображается - PullRequest
1 голос
/ 09 августа 2010

Я пытаюсь создать небольшую анимацию свечения с помощью Core Animation.Анимация пока работает отлично.Проблема в том, что анимация используется в ячейке таблицы.Когда анимация добавляется в слой, который в данный момент находится в ячейке, которая еще не видна (без прокрутки), анимация как-то не запускается?Похоже, CoreAnimation не будет анимировать слои, которые в данный момент не видны?

Мой код:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
[animation setFromValue:[NSNumber numberWithFloat:0.0]];
[animation setToValue:[NSNumber numberWithFloat:1.0]];
[animation setDuration:self.currentBlinkFrequency];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[animation setAutoreverses:YES];
[animation setRepeatCount:HUGE_VALF];
[[self.signalImage layer] addAnimation:animation forKey:@"opacity"];    

1 Ответ

1 голос
/ 09 августа 2010

Хорошо, нашел обходной путь.Вместо этого я использовал методы анимации UIView.Поскольку мою скорость анимации можно изменить / отключить во время анимации, мне нужно было использовать следующий код, чтобы избежать появления нескольких анимаций в одном и том же представлении.

Этот код запускает анимацию:

if (self.currentBlinkFrequency == 0) {
    self.shouldContinueBlinking = FALSE;
    self.animationIsRunning = FALSE;
} else {
    self.shouldContinueBlinking = TRUE;
    if (self.animationIsRunning == FALSE) {
        self.animationIsRunning = TRUE;
        [self blinkAnimation:@"blink" finished:YES target:self.signalImage];            
    }
}

Вызванный код анимации для метода "blinkAnimation" заимствован из другого поста в stackoverflow здесь

- (void)blinkAnimation:(NSString *)animationId finished:(BOOL)finished target:(UIView *)target
{
    if (self.shouldContinueBlinking) {
        [UIView beginAnimations:animationId context:target];
        [UIView setAnimationDuration:self.currentBlinkFrequency];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDidStopSelector:@selector(blinkAnimation:finished:target:)];
        if ([target alpha] == 1.0f)
            [target setAlpha:0.0f];
        else
            [target setAlpha:1.0f];
        [UIView commitAnimations];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...