我想为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];
}
谢谢, 的Corrado
答案 0 :(得分:1)
performSelector总是安排你的方法稍后执行(在本例中是main),即使你设置delay = 0.所以,在你的情况下,系统有机会正确启动/停止动画和/或完成其他东西,例如:由于触摸事件而自动突出显示按钮。系统在完成按钮的高亮显示动画后启动动画。直接呼叫会干扰这一点。
答案 1 :(得分:0)
你最好的选择可能是根本不使用UIButton(因为你试图避免它的一些继承行为)。您可以使用几种不同的方法。我会考虑使用UIImageView,并在代码中为其帧添加手势识别器。然后,您可以根据需要为突出显示设置动画,因为系统不会尝试为您执行此操作。