防止UIButton的setTitle:forState:动画

时间:2015-04-14 14:48:21

标签: ios objective-c swift animation uibutton

我使用NSTimer每秒更新UIButton的标题。

它有效,但标题中的文字会自动闪烁(动画为alpha 0并返回)。

我尝试使用button.layer.removeAllAnimations()没有运气,也没有例外,所以QuartzCore似乎正确链接。


目前的非工作偏执代码:

UIView.setAnimationsEnabled(false)
UIView.performWithoutAnimation {
    button.setTitle(time, forState: .Normal)
    button.layer.removeAllAnimations()
        }
UIView.setAnimationsEnabled(true)

3 个答案:

答案 0 :(得分:38)

确保您的按钮是“自定义”按钮,而不是“系统”按钮。

如果您在故事板上创建了它,那么只需更改按钮类型即可。如果您以编程方式创建它,那么它应该是:

UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];

答案 1 :(得分:16)

我做了一个Swift扩展来执行此操作:

extension UIButton {
    func setTitleWithOutAnimation(title: String?) {
        UIView.setAnimationsEnabled(false)

        setTitle(title, forState: .Normal)

        layoutIfNeeded()
        UIView.setAnimationsEnabled(true)
    }
}

适用于iOS 8和9,UIButtonTypeSystem

答案 2 :(得分:7)

您可以在闭包内执行按钮更改:

UIView.performWithoutAnimation {
    //Button changes
    button.layoutIfNeeded()
}

希望这有帮助。