This question already has answers here:
Closed 3 years ago.
I am using a NSTimer
to update a UIButton
's title every second.
It works but the text in the title blinks (animates to alpha 0
and back) automatically.
I tried to use button.layer.removeAllAnimations()
with no luck, and no exceptions, so QuartzCore seems to be correctly linked.
Current non-working paranoid code:
UIView.setAnimationsEnabled(false)
UIView.performWithoutAnimation {
button.setTitle(time, forState: .Normal)
button.layer.removeAllAnimations()
}
UIView.setAnimationsEnabled(true)
Make sure your button is a "custom" button and not a "system" button.
If you created it on a storyboard, then just change the Button Type. If you created it programmatically, then it should be:
UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
I’ve made a Swift extension to do this:
extension UIButton {
func setTitleWithOutAnimation(title: String?) {
UIView.setAnimationsEnabled(false)
setTitle(title, forState: .Normal)
layoutIfNeeded()
UIView.setAnimationsEnabled(true)
}
}
Works for me on iOS 8 and 9, with UIButtonTypeSystem
.
You can perform Button changes inside the closure:
UIView.performWithoutAnimation {
//Button changes
button.layoutIfNeeded()
}
Hope this helps.