Я обновляю старое приложение с помощью AdBannerView
и когда оно отсутствует, оно исчезает с экрана. Когда есть реклама, она скользит по экрану. Основные вещи.
По старому стилю я установил кадр в анимационном блоке. В новом стиле у меня есть IBOutlet
для ограничения автоматического размещения, которое определяет позицию Y, в данном случае это расстояние от нижней части суперпредставления, и изменяю константу:
- (void)moveBannerOffScreen {
[UIView animateWithDuration:5 animations:^{
_addBannerDistanceFromBottomConstraint.constant = -32;
}];
bannerIsVisible = FALSE;
}
- (void)moveBannerOnScreen {
[UIView animateWithDuration:5 animations:^{
_addBannerDistanceFromBottomConstraint.constant = 0;
}];
bannerIsVisible = TRUE;
}
И баннер движется именно так, как и ожидалось, но без анимации.
ОБНОВЛЕНИЕ: я повторно смотрел доклад WWDC 12 "Лучшие практики для освоения автоматической компоновки", который охватывает анимацию. Здесь обсуждается, как обновить ограничения с помощью CoreAnimation:
Я пытался с помощью следующего кода, но получить точно такие же результаты:
- (void)moveBannerOffScreen {
_addBannerDistanceFromBottomConstraint.constant = -32;
[UIView animateWithDuration:2 animations:^{
[self.view setNeedsLayout];
}];
bannerIsVisible = FALSE;
}
- (void)moveBannerOnScreen {
_addBannerDistanceFromBottomConstraint.constant = 0;
[UIView animateWithDuration:2 animations:^{
[self.view setNeedsLayout];
}];
bannerIsVisible = TRUE;
}
Кстати, я проверял множество раз, и это выполняется в главном потоке.