【问题标题】:Animate transition between normal and highlighted state of a UIButtonUIButton 的正常状态和突出显示状态之间的动画转换
【发布时间】: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];
}

谢谢, 科拉多

【问题讨论】:

    标签: ios objective-c animation uibutton performselector


    【解决方案1】:

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

    【讨论】:

    • 谢谢,现在有意义了!
    【解决方案2】:

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

    【讨论】:

    • 谢谢...我会试试你的建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多