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 的突出显示 UIControl 状态