I have a UIView
subclass with a corresponding xib
file. In my xib I have a NSLayoutConstraint
property which I'm trying to animate. I have an animateIn
method. The problem is that only the animateIn method works. When I try to update the constant again it simply stays at the previous value.
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *horizontalConstraint;
I'm trying to update the constant after a button press. But the constant doesn't seem to update after setting. It still logs 0 even after setting it to -500. I'm calling layoutIfNeeded
but nothing happens.
// this works
- (void) animateIn {
[UIView animateWithDuration:1.0 delay:2.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.alpha = 1.0;
} completion:^(BOOL finished) {
[UIView animateWithDuration:1.0 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.horizontalConstraint.constant = 0;
[self layoutIfNeeded];
} completion:^(BOOL finished) {
}];
}];
}
// this does not work
- (IBAction)resume:(id)sender {
self.horizontalConstraint.constant = -500;
[self layoutIfNeeded];
NSLog(@"%f",self.horizontalConstraint.constant); // this always stays 0
}
UPDATE
It seems that my NSLayoutConstraint is (null) when I want to use it a second time. That would explain why it is not updating. How should I keep a reference to it?
You will need to call setNeedsUpdateConstraints
method of corresponding UIView(control)
of which your NSLayoutConstraint is present to update constraint.
For example of UIButton
self.buttonConstraint.constant = 55;
[self.btnTest setNeedsUpdateConstraints];
In your case
[self setNeedsUpdateConstraints];