2013-03-18 6 views
1

У меня есть этот кусок кода, который отлично работает в одном из моих других проектов, где я достигаю эффекта «строба» текста, мигающего от черного до белого на петле. Когда я копировал и вставлял его в один из моих проектов, CompletionBlock срабатывает немедленно, игнорируя продолжительность анимации. Что может быть причиной?CATransaction CompletionBlock Firing Immediately

- (void)animateTextFlashingWhite 
{ 
    [CATransaction begin]; 
    [CATransaction setCompletionBlock:^{ 
     [self animateTextFlashingBlack]; 
     NSLog(@"finished white"); 
    }]; 
    [CATransaction setValue:[NSNumber numberWithFloat:0.7f] forKey:kCATransactionAnimationDuration]; 
    self.myStrobeLabel.textColor = [UIColor whiteColor]; 
    [CATransaction commit]; 
} 

- (void)animateTextFlashingBlack 
{ 
    [CATransaction begin]; 
    [CATransaction setCompletionBlock:^{ 
     [self animateTextFlashingWhite]; 
     NSLog(@"finished black"); 
    }]; 
    [CATransaction setValue:[NSNumber numberWithFloat:0.7f] forKey:kCATransactionAnimationDuration]; 
    self.myStrobeLabel.textColor = [UIColor blackColor]; 
    [CATransaction commit]; 
} 

ответ

2

Не думаю, что textColor является анимированным.

Если вы просто хотите кроссфейд, вы можете это сделать, добавив объект CATransition к метке.

[self.myStrobeLabel.layer addAnimation:[CATransition animation] forkey:@"transition"]; 
self.myStrobeLabel.textColor = [UIColor blackColor]; 
+0

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

+0

@Kevin_TA: 'CATransition' соответствует' CAMediaTiming', поэтому вы можете установить продолжительность и еще что-то там. Что касается использования цикла, возможно, просто настроили 'NSTimer'? –

+0

@Kevin_TA: Также возможно, что сам «CATransition» будет использоваться с «CATransaction» и, таким образом, позволяет использовать блоки завершения, но я никогда не пробовал это сам, поэтому я не знаю, будет ли это работать , –