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

Ios UIButton状态转换动画不适用于setEnabled或setHighlighted,ios,uibutton,uiviewanimationtransition,Ios,Uibutton,Uiviewanimationtransition,更新 动画正在为setEnabled=NO工作 当UIScrollView滚动时,将触发setEnabled=YES的动画,UIButton位于scrollview内,当UIScrollView滚动完成时,将触发setEnabled=NO的动画 因此,我认为setEnabled=YES的动画不起作用的原因是视图正在移动。我不确定,但这似乎是我迄今为止发现的唯一合乎逻辑的解释。我用dispatch_after做了一个测试,该动画也适用于setEnabled,换句话说,如果在视图不移动时触发动画,则

更新

动画正在为setEnabled=NO工作

当UIScrollView滚动时,将触发setEnabled=YES的动画,UIButton位于scrollview内,当UIScrollView滚动完成时,将触发setEnabled=NO的动画

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

我需要做什么

我有两个不同的UIButton背景图像,一个用于uicontrol状态正常,另一个用于uicontrol状态禁用

我想要一个UIButton从一种状态慢慢过渡到另一种状态的效果

我一直在做什么

问题

UIButton转换为setEnabled=在持续时间内没有状态,但无论我在选项中添加了什么,setEnabled几乎都会立即发生

我有什么遗漏吗


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

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

frame, center, bounds, transform, alpha, backgroundColor, contentStretch
此处参考:


然而,如果你想为动画创建自定义属性,你可以看看这篇文章,它描述了一种实现方法

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

frame, center, bounds, transform, alpha, backgroundColor, contentStretch
此处参考:


然而,如果你想为动画创建自定义属性,你可以看看这篇文章,它描述了一种实现方法

我可以确认您的代码在转换过程中都能按预期工作

已启用:否->是

以及过渡时期

启用:是->否

所以,我猜你的应用程序中正在发生某种干扰过渡的事情。尝试定义一个完成块,如:

...
completion:^(BOOL finished) {
    NSLog(@"FINISHED? %@", finished?@"YES":@"NO");
} ];
并在transitionWith调用之前或动画块内部添加跟踪日志,以检查从开始到完成的转换运行时间


我的猜测是,当按钮正在转换时,另一个正在发生的事情改变了它的状态,并且作为一个次要的效果打破了转换。我担心如果看不到更多的代码,就不可能进一步帮助您……

我可以确认您的代码在过渡过程中是否按预期工作

已启用:否->是

以及过渡时期

启用:是->否

所以,我猜你的应用程序中正在发生某种干扰过渡的事情。尝试定义一个完成块,如:

...
completion:^(BOOL finished) {
    NSLog(@"FINISHED? %@", finished?@"YES":@"NO");
} ];
并在transitionWith调用之前或动画块内部添加跟踪日志,以检查从开始到完成的转换运行时间


我的猜测是,当按钮正在转换时,另一个正在发生的事情改变了它的状态,并且作为一个次要的效果打破了转换。我担心如果看不到更多的代码,无法进一步帮助您…

将enableDisable声明为块类型对象。@johnykumar不确定您的意思。当我将您的持续时间设置为10时,它起作用setEnable=NodeCare enableDisable作为块类型对象。@johnykumar不确定您的意思。当我将您的持续时间设置为10时,它起作用setEnable=NOit正在为setEnabled=NO工作;这让我感到惊讶:我同意Adil,你应该创建你自己的UIControl或UIView,但是使用合成,不要将UIButton子类化。或者只创建你的自定义UIButton类,创建你自己的自定义动画:类似于[按钮设置启用:是动画:是]我不确定动画属性在这里是否相关。我们谈论的是转型,观点是:。。。非动画持续时间:…它正在为setEnabled=NO工作;这让我感到惊讶:我同意Adil,你应该创建你自己的UIControl或UIView,但是使用合成,不要将UIButton子类化。或者只创建你的自定义UIButton类,创建你自己的自定义动画:类似于[按钮设置启用:是动画:是]我不确定动画属性在这里是否相关。我们谈论的是转型,观点是:。。。非动画持续时间:…我猜原因是用户交互。动画立即开始和停止。我用一个显式触发器尝试了同样的代码,它工作得很好,但当它从手势触发时,它不工作,我猜原因是用户交互。动画立即开始和停止。我用一个显式触发器尝试了相同的代码,它工作得很好,但当它是由手势触发时,它就不工作了