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

时间:2014-09-08 19:59:55

标签: ios objective-c animation uibutton performselector

我想为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

2 个答案:

答案 0 :(得分:1)

performSelector总是安排你的方法稍后执行(在本例中是main),即使你设置delay = 0.所以,在你的情况下,系统有机会正确启动/停止动画和/或完成其他东西,例如:由于触摸事件而自动突出显示按钮。系统在完成按钮的高亮显示动画后启动动画。直接呼叫会干扰这一点。

答案 1 :(得分:0)

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