两个 UILabel 之间的交叉淡入淡出

Posted

技术标签:

【中文标题】两个 UILabel 之间的交叉淡入淡出【英文标题】:Cross-Fade Between Two UILabels 【发布时间】:2010-12-22 07:45:14 【问题描述】:

假设我有两个UILabels(labelOnelabelTwo),我需要在两个标签之间交叉淡入淡出。实现这种效果的最佳方法是什么?

我尝试使用[UIView beginAnimations:@"crossFade" context:nil]; 等来淡出labelOne,然后淡入labelTwo,但是当两个标签都处于低不透明度并且您可以看穿两者时,会有相当明显的差距。我需要一个干净的交叉淡入淡出效果来代替。我有一种感觉,我需要使用CABasicAnimation,但我希望得到一些指导。提前致谢!

【问题讨论】:

【参考方案1】:

这将使一个标签(或任何视图)淡出,同时淡入另一个标签。动画进行到一半时,两者的不透明度都为 50%。要单独控制 alpha,请为每个标签使用单独的动画并延迟其中一个。

label_to_show.alpha = 0.0;
label_to_hide.alpha = 1.0;

[UIView beginAnimations:nil context:nil];

label_to_show.alpha = 1.0;
label_to_hide.alpha = 0.0;

[UIView commitAnimations];

【讨论】:

【参考方案2】:

您可以摆弄动画曲线,尝试找到可接受的外观,但我认为您最好只在两个标签下方保留第三个视图,以在发生淡入淡出时保持背景外观。

如果您的意思是您可以同时看到两个标签不会同时淡化,而是快速淡化到标签开始不清晰的程度,请将其替换为具有相同淡化级别的新标签,然后淡化它快速达到全面可见。

我说的是“淡入淡出”,但在标签顶部放置一个背景色视图并继续使该视图更加不透明,切换下面的标签,然后再次将其淡化为透明,看起来也很好。

【讨论】:

谢谢亚当。有没有其他更优雅的方法来解决这个问题,而不必使用额外的视图?我提到了CABasicAnimation,因为我看到有人谈论使用@"opacity" 键在UILabels 之间进行成功的交叉淡入淡出,但我不知道如何使用这种方法。 drawonward 的上述解决方案是使用 .alpha 属性来执行我所描述的操作。我不确定 opacity 键如何使它看起来非常不同。在按照描述进行淡入淡出时,标签允许背景显示的确切问题是什么?如果是这样,我认为第三种观点可能不是非常聪明,但它并不费力,应该会产生结果。【参考方案3】:

我已经实现了类似的东西并且效果很好。

[UIView transitionWithView:self duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:^
    _label1.hidden = YES;
    _label2.hidden = NO;
 completion:nil];

【讨论】:

以上是关于两个 UILabel 之间的交叉淡入淡出的主要内容,如果未能解决你的问题,请参考以下文章

如何控制两个 UIImage 的无动画之间的淡入淡出?

Audiokit 交叉淡入淡出声音循环

如何在 AVAudioPlayers 之间交叉淡入淡出

为啥这个 CSS @keyframes 规则不交叉淡入淡出?

looper.js 插件 - 交叉淡入淡出动画之间不可见的图像

使用 NAudio 交叉淡入淡出