【问题标题】:CATransaction CompletionBlock Firing ImmediatelyCATransaction CompletionBlock 立即触发
【发布时间】:2013-03-18 22:44:01
【问题描述】:

我的这段代码在我的其他项目中完美运行,在该项目中,我实现了文本在循环中从黑色闪烁到白色的“频闪”效果。当我将它复制并粘贴到我的另一个项目中时,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];
}

【问题讨论】:

    标签: iphone ios caanimation catextlayer catransaction


    【解决方案1】:

    我不认为textColor 是可动画的。

    如果您只是想要一个淡入淡出,您可以通过将CATransition 对象添加到标签来完成此操作。

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

    【讨论】:

    • 乍一看,这看起来只是将文本更改为黑色。我如何让它在一个循环中从黑色变为白色,反之亦然?有完成块设置吗?另外,持续时间在哪里定义?谢谢。
    • @Kevin_TA: CATransition 符合 CAMediaTiming 所以你可以在那里设置持续时间等等。至于使用循环,也许只是设置一个NSTimer
    • @Kevin_TA:CATransition 本身也有可能与CATransaction 一起使用,因此可以在那里使用完成块,但我自己从未尝试过,所以我不这样做不知道这样行不行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多