UILabel 的 setAlpha 动画不起作用

Animation of setAlpha for UILabel not working

我在视图上有一些 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 但这似乎是一个可怕的解决方案。

问题是 textColor属性 不可设置动画。如果您的标签与其底层视图的颜色不同,您会看到它在动画发生时变得透明。要为文本颜色的变化设置动画,您应该使用 CATextLayer 而不是 UILabel。比你可以动画改变它 foregroundColour 属性.

这是一个很好的教程 http://corecocoa.wordpress.com/2011/10/04/animatable-text-color-of-uilabel/

快速修复:使用 animateWithDuration 方法而不是 transitionWithView 进行 alpha 转换。

唯一对我有用的解决方案是将 UILabel 放在 UIView 中并为 UIView 而不是 UILabel 的 alpha(或仅 bg 颜色,取决于您的需要)设置动画。