【问题标题】:UIButton state transition animation not working for setEnabled or setHighlightedUIButton 状态转换动画不适用于 setEnabled 或 setHighlighted
【发布时间】:2015-03-03 21:27:31
【问题描述】:

更新

动画适用于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 中输入什么,几乎都会立即发生。

我有什么遗漏吗?

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

【问题讨论】:

  • 将 enableDisable 声明为块类型对象。
  • @johnykumar 不确定你的意思。
  • 我运行时它正在工作
  • 将持续时间设置为 10
  • 它适用于setEnable=NO

标签: ios uibutton uiviewanimationtransition


【解决方案1】:

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

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

参考这里:UIView animation

但是,如果您想为动画创建自定义属性,您可以查看这篇文章,其中描述了实现它的方法。 Create a custom animatable property

【讨论】:

  • it is working for setEnabled = NO; 这让我感到惊讶:(
  • 我同意 Adil,你应该创建自己的 UIControl 或 UIView,但是使用组合,不要继承 UIButton。
  • 或者只是制作您的自定义 UIButton 类,并创建您自己的自定义动画:类似于[button setEnabled:YES animated:YES]
  • 我不确定动画属性是否与此处相关。我们说的是transitionWithView:... 而不是animateWithDuration:...
【解决方案2】:

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

启用:否 -> 是

为了过渡

启用:是 -> 否

所以,我的猜测是您的应用中正在发生一些其他事情,以某种方式干扰了转换。尝试定义一个完成块,如:

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

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

我的猜测是,当按钮正在转换时,正在发生的其他事情会改变其状态,并且作为次要效果会中断转换。恐怕没有看到更多代码,就无法进一步帮助您……

【讨论】:

  • 我猜原因是用户交互。动画立即开始和停止。我用显式触发器尝试了相同的代码,它运行良好,但是当它从手势触发时它不起作用
猜你喜欢
  • 2018-09-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多