两个 UILabel 之间的交叉淡入淡出
Posted
技术标签:
【中文标题】两个 UILabel 之间的交叉淡入淡出【英文标题】:Cross-Fade Between Two UILabels 【发布时间】:2010-12-22 07:45:14 【问题描述】:假设我有两个UILabel
s(labelOne
和labelTwo
),我需要在两个标签之间交叉淡入淡出。实现这种效果的最佳方法是什么?
我尝试使用[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 之间的交叉淡入淡出的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个 CSS @keyframes 规则不交叉淡入淡出?