用于UILabel的setAlpha动画无法正常工作

时间:2015-06-18 14:43:54

标签: ios objective-c animation uilabel alpha

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

3 个答案:

答案 0 :(得分:1)

快速修复:使用animateWithDuration方法代替transitionWithView进行Alpha转换。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

对我有用的唯一解决方案是将UILabel置于UIView&对UIView而不是UILabel的alpha(或仅bg颜色,取决于你需要的)进行动画处理。