Я искал вокруг SO и нашел некоторые связанные сообщения, но ни один из них, который (пока) не решил мою проблему.Просмотр не анимированный с помощью Autolayout
У меня есть настройка представления в моей раскадровке, с ограничением, подключенным через IBOulet. При определенном действии вид должен двигаться вверх (или вниз к его исходной позиции). Для моей жизни я не могу заставить ее работать правильно. До autolayout, я побежал этот бит кода:
- (void)animateStarBackground:(NSString *)animationID
finished:(NSNumber *)finished
context:(void *)context
myView:(UIView *)myView
xPos:(float)xPos
yPos:(float)yPos {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.2];
[UIView setAnimationDelay:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelegate:self];
myView.center = CGPointMake(xPos, yPos);
[UIView commitAnimations];
}
Он используется для работы большой, но все равно ... все мы знаем, что это не работает в Autolayout больше. Таким образом, я изменил его на следующее:
-(void)animateButton:(UIView *)myView {
[UIView animateWithDuration:8.0f animations:^{
_viewConstA.constant = 45.0;
[myView layoutIfNeeded];
}];
}
Когда происходит действие, вместо того чтобы начинать в это начальное положение, как указано в раскадровке, она начинается как вид 1x1 пикселей в верхнем левом углу угол и анимировать вниз в место последнего отдыха (вместо того, чтобы двигаться на 15 пикселей, как я и предполагал).
Теперь, если я вытащил [myView layoutIfNeeded];, действие позиционирует вид в нужном месте ... НО оно не оживляет. Это сразу появляется, когда появляется представление.
Первый захват экрана - это начальное местоположение. 2-й захват - это то, что должно было быть местом окончательного отдыха. Третий - это оживление с неправильного места и направления.
Мысли/комментарии? Какого черта я делаю неправильно? Я думал, что это будет так просто ... Я должен упустить что-то очевидное.
Я вижу, что когда я делаю это в 'viewDidLoad', но работает правильно, когда я откладываю на' viewDidAppear'. – Rob
Подождите. поэтому вы говорите, когда ставите [self animateButton: myView]; в вашем viewDidAppear, это НЕ анимация из 1x1 пикселей в верхнем левом углу? Huh ... это происходит для меня независимо от того, в каком месте я его загружаю. Я склонен просто делать две разные раскадровки - одну для iPhone 5 и одну для всего остального, и просто продолжаю использовать свой оригинальный код. Фу, это расстраивает. – Drew
Да, это мой опыт. Я просто проверил его, чтобы убедиться, что я не теряю рассудок и подтвердил это.Нижняя строка, выполняющая блочную анимацию ограничений (включая вызов 'layoutIfNeeded') в' viewDidAppear' (или позже), отлично подходит для меня, хотя, когда я это делаю в 'viewDidLoad', я вижу поведение, которое вы описываете. – Rob