1

このコードは、ループ上でテキストが黒から白に点滅する「ストロボ」効果を実現している他のプロジェクトの1つで完全に機能します。それをコピーして別のプロジェクトに貼り付けると、アニメーションの継続時間を無視して、CompletionBlockがすぐに起動します。理由は何でしょうか?

- (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];
}
4

1 に答える 1

2

アニメ化できるとは思いませんtextColor

単にクロスフェードが必要な場合はCATransition、ラベルにオブジェクトを追加することでこれを実現できます。

[self.myStrobeLabel.layer addAnimation:[CATransition animation] forkey:@"transition"];
self.myStrobeLabel.textColor = [UIColor blackColor];
于 2013-03-18T22:46:40.050 に答える