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】:

问题是textColorproperty 是不可动画的。如果您的标签与其底层视图具有不同的颜色,您会看到它在动画发生时变得透明。要动画更改文本颜色,您应该使用 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() 只作用于一个按钮?

添加延迟动画时,UIView 动画不起作用

视图不在屏幕时的 UIView 动画 alpha 不起作用

如何为 UILabel 的 textColor 属性设置动画?

如何使用 Objective-C 将字符添加到 iOS 中的 UILabel 动画?

在相机预览中不工作 setAlpha