Проблема заключалась в ограничениях вида 3, которые не меняются после анимации, и когда мы хотим манипулировать иерархией представлений, анимация перестает работать должным образом. Мэтт сказал об этом в своем ответе, также он предлагает решение из своей великой книги: http://www.apeth.com/iOSBook/ch17.html#_animation_and_autolayout благодарю вас за это Matt.
Я немного изменил это решение и решил разместить его здесь для всех, кто в этом нуждается. Но если вы хотите понять это лучше, я настоятельно рекомендую вам прочитать главу об анимации из книги, ссылка выше.
Во-первых, нам необходимо анимировать наше движение 3, а затем изменить наши ограничения и только после этого изменить иерархию представлений.В книге нашли несколько способов сделать это, но это один казался мне лучшим:
layout = -35.0; // new constraint constant of self.view3
NSArray *constraintsForAnimation = self.myMainView.constraints; // all constraints of superview
NSUInteger indexOfconstraintsAttribute = [constraintsForAnimation
indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop){ // get index of constraint of view 3
NSLayoutConstraint *constraint = obj;
return (([constraint.firstItem isEqual: self.view3])) ? idx : NO; // return this index if we found constraint of view 3
}];
constraint.constant = layout; // changing the constraint of view3
[UIView animateWithDuration:0.3 animations:^{ // animation
[self.view3 layoutIfNeeded]; // apply new constraints to view3
}];
[self.myMainView exchangeSubviewAtIndex:3 withSubviewAtIndex:4];// toggle view 1 with view 2
Мы перемещаем наш взгляд 3 только с помощью ограничений, мы не ставим рамку или центр вида собственности. Хорошо, мы сделали это, и это работает так, как я хочу. Надеюсь, это тоже поможет.
какой вид вид3? – matt
@matt это изображение, например, как это может быть ценным? Вид 3 может вести себя неправильно? –
, чтобы я мог попытаться воспроизвести проблему. Работая над ним ... – matt