UIButton状态转换动画不适用于setEnabled或setHighlighted

时间:2015-01-06 08:32:40

标签: ios uibutton uiviewanimationtransition

更新

动画适用于setEnabled=NO

setEnabled=YES正在滚动时触发UIScrollView的动画,UIButton位于滚动视图内,setEnabled=NO的动画在UIScrollView时被触发滚动完成。

所以,我认为setEnabled=YES的动画不起作用的原因是视图正在移动。我不确定,但这似乎是迄今为止我发现的唯一合乎逻辑的解释。我使用dispatch_after()进行了测试,动画也适用于setEnabled,换句话说,如果在视图不移动时触发动画,则动画正在工作。

我需要做什么?

我有两个不同的背景图片,UIButton一个用于UIControlStateNormal,另一个用于UIControlStateDisabled

我想要一个UIButton从一个状态缓慢转换到另一个状态的效果

我一直在做什么?

BOOL enableDisable = YES;
[UIView transitionWithView:((UIButton*)object)
                                          duration:3.3
                                           options:UIViewAnimationOptionTransitionCrossDissolve
                                        animations:^{ [((UIButton*)object) setEnabled:enableDisable]; }
                                        completion:nil];

问题

UIButton在整个持续时间内转换为setEnabled=NO状态,但无论我在options setEnabled放置的内容几乎立即发生。

有什么我想念的吗?

提前感谢您的时间和回应。

2 个答案:

答案 0 :(得分:4)

不幸的是,UIView的启用或禁用状态不是Apple文档中可设置动画的属性的一部分。动画属性是:

frame, center, bounds, transform, alpha, backgroundColor, contentStretch

参考此处:UIView animation

但是,如果要为动画创建自定义属性,可以查看此帖子,其中介绍了实现它的方法。 Create a custom animatable property

答案 1 :(得分:0)

我可以确认您的代码是否按预期运行

已启用:否 - >是

和过渡

已启用:是 - > NO

所以,我的猜测是你的应用程序中发生了一些其他事情干扰了转换。尝试定义完成块,如:

...
completion:^(BOOL finished) {
    NSLog(@"FINISHED? %@", finished?@"YES":@"NO");
} ];

并在transitionWith调用之前或动画块内添加跟踪日志,以检查转换从开始到完成的运行时间。

我的猜测是,当按钮正在转换时,正在发生的其他事情会改变其状态,并且作为辅助效果会打破转换。我担心如果没有看到更多的代码,就无法再帮助你了......