UILabel 的 setAlpha 动画不起作用
Posted
技术标签:
【中文标题】UILabel 的 setAlpha 动画不起作用【英文标题】:Animation of setAlpha for UILabel not working 【发布时间】:2015-06-18 14:43:53 【问题描述】:当有人按住视图时,我想在视图上淡出一些 UILabel。
我试图通过将文本的 alpha 值从 1.0 更改为 0.5 来执行淡入淡出,然后在释放触摸时再次返回。
这是我的代码:
[UIView transitionWithView:self.view duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations: ^
[someImageView removeFromSuperview];
[[self someText] setAlpha:0.5];
completion:nil];
在此块中删除的 imageView 动画效果很好,但是,文本的 alpha 变化没有动画,它只是在动画完成后立即发生,即当 imageView 动画并被删除时,文本仍然存在在 alpha 1.0,然后当动画完成时,文本 alpha 突然从 1.0 变为 0.5,没有动画。
我这样做是错的还是我应该这样做的其他方式?
我能想到的唯一另一种方法是复制 UILabel 以便有两个,一个带有 alpha 1.0,一个带有 alpha 0.5。然后我可以淡入隐藏原来的 UILabel 并淡入半透明的 UILabel ,但这似乎是一个可怕的解决方案。
【问题讨论】:
你试过用animateWithDuration
代替transitionWithView
吗?
刚刚尝试过这个:[UILabel animateWithDuration:0.3 animations: ^ [[self someText] setAlpha:0.5]; completion:nil];
但仍然有同样的问题。你是这个意思吗?
【参考方案1】:
快速修复:使用 animateWithDuration
方法而不是 transitionWithView
进行 alpha 转换。
【讨论】:
似乎无法始终如一地工作。我正在使用以下代码:[UILabel animateWithDuration:0.3 animations: ^ [[self someText] setAlpha:0.5]; completion:nil];
。它是否正确?它似乎可以持续更长的时间(> 0.9),但不会更短。
我现在正在对其进行测试,实际上它似乎可以双向工作。使用self.view
作为transitionWithView
的参数似乎会降低性能,但两种方法都有效。也许是您的帧速率导致了明显的故障。
嗯,但如果是这样的话,我要删除的 ImageView 的动画肯定也会有同样的问题,但它可以正常工作吗?
这很奇怪。我能够在模拟器中正常工作,删除子视图并更改 alpha。我仍然认为快速为多个对象设置动画可能会有延迟,或者肯定有其他一些混淆因素。避免使用self.view
进行转换,如果可能,请完全使用animateWithDuration
(将图像视图的 alpha 设置为 0,然后在完成块中将其删除)。
啊,太好了。按照您的建议将所有内容移至animateWithDuration
块并删除transitionWithView
(此删除是关键)。两者一个接一个地运行(transitionWithView
中删除了 imageView,animateWithDuration
中更改了文本 alpha)它不起作用,transitionWithView
似乎干扰了animateWithDuration
?将它全部放在单个 animateWithDuration
块中,它可以正常工作(也使用 imageView 的 alpha 更改并按照您的建议在完成块中删除)。非常感谢!【参考方案2】:
问题是textColor
property 是不可动画的。如果您的标签与其底层视图具有不同的颜色,您会看到它在动画发生时变得透明。要动画更改文本颜色,您应该使用 CATextLayer 而不是 UILabel。比你可以动画改变它foregroundColour
属性。
这是一个很好的教程 http://corecocoa.wordpress.com/2011/10/04/animatable-text-color-of-uilabel/
【讨论】:
UILabels 的alpha
属性是否也一样?
当你改变alpha
时,你实际上改变了UIView的backgroundColor
。在 UILabel 中更改 alpha
使其同时更改 UILabel 的 backgroundColor
(如简单的 UIVIew)和 textColor
如果我走这条路,我是否需要在我的视图中以编程方式定位CATextLayer
,而不是简单地将其链接到情节提要中的标签?不敢相信他们没有这个基本功能。
是的,你需要这个【参考方案3】:
唯一对我有用的解决方案是将 UILabel 放在 UIView 中并为 UIView 的 alpha(或仅 bg 颜色,取决于您需要什么)设置动画,而不是 UILabel 的。
【讨论】:
以上是关于UILabel 的 setAlpha 动画不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥 setAlpha() 作用于我的所有按钮,而 setImageResource() 只作用于一个按钮?
如何为 UILabel 的 textColor 属性设置动画?