UIButton 的正常状态和突出显示状态之间的动画转换

Posted

技术标签:

【中文标题】UIButton 的正常状态和突出显示状态之间的动画转换【英文标题】:Animate transition between normal and highlighted state of a UIButton 【发布时间】:2014-09-08 19:59:55 【问题描述】:

我想为 UIButton 的正常状态和突出显示状态之间的过渡设置动画。

我在 IB 中放了 2 张图片作为两种状态的背景,并为 TouchUpInside 事件编写了以下代码:

- (void) animate 
    [UIView transitionWithView:self.myButton
                      duration:2
                       options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^ self.myButton.highlighted = YES; 
                    completion:^(BOOL finished) [UIView transitionWithView:self.myButton
                                                                   duration:2
                                                                    options:UIViewAnimationOptionTransitionCrossDissolve
                                                                 animations:^ self.myButton.highlighted = NO; 
                                                                 completion:nil];
     ];

这样动画就不会定期启动,尤其是当我快速点击按钮时。

我发现通过在上面的方法前面加上以下内容(链接到 UIButton 代替前一个)动画可以正常工作......但我不明白原因!

有人能解释一下当我添加最后一个方法时到底发生了什么吗?

- (void) firstThis 

    [self performSelector: @selector(animate) withObject: nil afterDelay: 0];

谢谢, 科拉多

【问题讨论】:

【参考方案1】:

performSelector 总是安排您的方法稍后执行(在这种情况下在 main 上),即使您设置延迟 = 0。因此,在您的情况下,系统有机会正确启动/停止动画和/或完成其他内容,例如:由于触摸事件而发生的按钮的自动突出显示。系统在完成自己的按钮高亮动画后开始动画。直接呼叫会干扰这一点。

【讨论】:

谢谢,现在有意义了!【参考方案2】:

您最好的选择可能是根本不使用 UIButton(因为您试图避免它的某些继承行为)。您可以使用几种不同的方法。我会考虑改用 UIImageView,并在代码中将手势识别器添加到其框架中。然后,您可以根据需要为突出显示设置动画,因为系统不会尝试为您执行此操作。

【讨论】:

谢谢...我会试试你的建议

以上是关于UIButton 的正常状态和突出显示状态之间的动画转换的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 状态

针对不同状态更改 UIButton 的渐变

禁用 UIButton 的突出显示 UIControl 状态

单击选定的 UIButton 时未显示 UIButton 突出显示状态

具有超过 1 个步骤的突出显示状态的 UIButton

突出显示/选定状态问题的 UIButton 背景颜色