У меня есть UIImageView, который я хочу медленно анимировать с эффектом панорамирования в фоновом режиме. Мой взгляд фонового изображения имеет четыре ограничения:UIView анимация одного ограничения влияет на другое ограничение
- Расстояние от верхних к верхнему направляющему макету (ноль)
- Расстояния от основания до нижнего направляющего макета (ноль)
- Ширины (постоянная при 850)
- Ведущего пространство для наблюдения (ноль, подключено к коду как)
Режим просмотра вида изображения установлен на «аспект заполнения». Когда я запускаю свое приложение, нет проблем, отображается статическое изображение. Добавить следующий код, чтобы оживить мое мнение:
-(void)animateBackgroundHorizontally:(BOOL)forward{
self.backgroundImageViewLeftMargin.constant = forward ? -500 : 0;
[self.backgroundImage setNeedsUpdateConstraints];
[UIView animateWithDuration:30 animations:^{
[self.backgroundImage layoutIfNeeded];
} completion:^(BOOL finished) {
[self animateBackgroundHorizontally:!forward];
}];
}
Тогда я называю [self animateBackgroundHorizontally:YES];
в viewWillAppear:
. Вот что происходит:
Изображение начинается анимация с неожиданным (но всегда то же самое) расположение (верхний край примерно в середине экрана, где он должен быть в верхней части экрана), правильно анимирует свое окончательное положение, а затем, когда оживление возвращается в исходное местоположение, оно делает анимировать правильно. Единственное свойство, которое я анимирую, - это левое поле. Когда я не вызываю код анимации, он отображается правильно. Почему анимация начинается с неправильного местоположения, как видно на изображении? Я попытался установить self.backgroundImage.translatesAutoresizingMaskIntoConstraints
на оба YES
(я получил неспособный одновременно удовлетворить constaints ошибки) и NO
, но это не сработало. Эта проблема сохраняется как на iOS 6, так и на iOS 7.