2013-11-29 2 views
0

я, показывая и скрывая подвид от нижней -----> сверху или сверху ----> Снизу с UIViewAnimation используя ниже кодКак использовать существующее автозавершение Constrains при перемещении sabview вверх?

-(IBAction)showClander 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:NO]; 
    [UIView setAnimationDuration:0.50]; 
    pickerView.frame = CGRectMake(0, 568-368, pickerView.frame.size.width, pickerView.frame.size.height); 
    [UIView commitAnimations]; 
} 

-(void)hideClander 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:NO]; 
    [UIView setAnimationDuration:0.50]; 
    pickerView.frame = CGRectMake(0, pickerView.frame.origin.y+368, pickerView.frame.size.width, pickerView.frame.size.height); 
    [UIView commitAnimations]; 
} 

Приведенный выше код работает нормально, когда я не используя Autolayout , но потому, что мое приложение поддерживает как портретную, так и альбомную ориентацию, поэтому я должен использовать автозапуск.

Теперь вопрос, как я могу установить различные Сдерживает этой точки зрения движущегося, для статического зрения я установить различные Препятствия, которые отлично работает для меня, как мой скриншот ниже показывает enter image description here enter image description here

Как вверху экрана показывают, что (значение Y как 371), когда я пытаюсь изменить его на (это мое требование), тогда я не получаю результат, как показано выше.

Вопрос в том, можно ли использовать существующие ограничения для перемещения объектов, не делая больших изменений для достижения вышеуказанного результата? Любое предложение будет оценено. Спасибо заранее

ответ

1

Вы можете анимировать изменение самих ограничений. Измените значения constant ограничений, которые необходимо изменить, и вызовите layoutIfNeeded внутри блока анимации.

Пример из моего кода:

NSLayoutConstraint* con = self.v_verticalPositionConstraint; 
con.constant -= 100; 
[UIView animateWithDuration:1 animations:^{ 
    [self.v layoutIfNeeded]; 
} completion:nil]; 

В целом, однако, анимация и autolayout враги, потому что они пытаются изменить рамку в целях в двух разных направлениях. См. Обсуждение в моей книге: http://www.apeth.com/iOSBook/ch17.html#_animation_and_autolayout

+0

Спасибо, что это имеет смысл, но я смущаюсь, должен ли я удалить нижнее пространство для ограничений супервизора? в настоящее время он имеет 0 постоянное значение. – jamil

Смежные вопросы