2015-02-25 2 views
3

Я прочитал много вопросов, что состояние для того, чтобы анимировать изменения ограничений, мы просто нужно ...оживляющий Constraint Изменения в - (Недействительными) updateConstraints

self.someConstraint.constant = 0.f; 
[UIView animateWithDuration:0.5f animations:^{ 
    [self layoutIfNeeded]; 
}]; 

Недавно я прочитал, что пользовательский вид подклассы должны использовать метод -(void)updateConstraints в UIView для выполнения обновлений ограничений в случае возникновения многих изменений свойств, которые могут привести к тому, что вы выполните вышеупомянутый блок кода в нескольких местах, что приведет к тому, что многие макеты не будут удалены.

UIView -(void)updateConstraints documentation

Я на самом деле нравится этот подход, при котором мы обновляем все ограничения. Некоторые просто код ...

- (void)updateConstraints 
{ 
    if(someCondition) 
    { 
     self.someConstraint.constant = 0.f; 
    } 
    //Maybe some other conditions or constant changes go 
    here based on the current state of your view. 
    [super updateConstraints]; 
} 

На данный момент, мое первоначальное ограничение код анимации теперь только становится

[self setNeedsUpdateConstraints]; 

Единственная проблема с этим, я теперь потерял способность оживлять эти изменения ,
Я просмотрел документацию вида, чтобы найти способ анимации этих изменений в ограничениях, но я не могу найти подходящий метод для переопределения для вызова [self layoutIfNeeded] в блоке анимации. Даже в этом случае, я считаю, что не нужно называть это потому, что макет будет выполнен, и я чувствую, что мне не нужно будет принудительно его править тогда и там.

Кто-нибудь знает, КАК вызвать эти изменения ограничений для оживления?

ответ

2

Необходимо позвонить по телефону [self updateConstraintsIfNeeded]. Таким образом, ваш код будет выглядеть так ...

[self updateConstraintsIfNeeded]; 
[UIView animateWithDuration:0.25 animations:^{ 
    [self layoutIfNeeded]; 
}]; 
Смежные вопросы