Анимировать представление изображения внутри представления контейнера в iOS?

Я пытаюсь анимировать представление изображения внутри представления контейнера. Представление контейнера квадратное и выровнено по центру экрана. у меня есть представление изображения внутри моего контейнера. положение моего представления изображения показано на снимке экрана ниже. (суперпредставление - это представление моего контейнера)

введите здесь описание изображения

я хочу анимировать вид изображения внутри контейнера, например, от верхнего 0 до нижнего 0, поэтому я попытался анимировать от верхнего 0 до верхнего максимума (то есть высоты представления контейнера), но он не работает должным образом. Мой ожидаемый результат - это что-то вроде представления изображения, которое должно непрерывно анимироваться внутри представления контейнера сверху вниз и наоборот.

метод анимации, который я пробовал,

int maxTop = self.containerView.frame.size.height/2;
self.topConstraint.constant = maxTop;
[self.imageView setNeedsUpdateConstraints];
[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse animations:^{
    [self.imageView layoutIfNeeded];
} completion:nil];

РЕДАКТИРОВАТЬ: вот текущий выходной GIF. Он не движется на полную высоту GIF


person Bluewings    schedule 25.05.2015    source источник
comment
мое верхнее пространство просмотра изображения равно 0. изображение неверно   -  person Bluewings    schedule 25.05.2015
comment
Может быть, вам нужно вызвать layoutIfNeeded для себя, а не для изображения? Поскольку imageView является подпредставлением себя (containerView), а layoutIfNeeded работает только с подпредставлениями. Кроме того, вы можете добавить верхнее (0) и нижнее (0) ограничение с разными приоритетами и анимировать приоритеты ограничения, а не константы.   -  person Sega-Zero    schedule 25.05.2015
comment
@ Sega-Zero, это имеет смысл. Позвольте мне попробовать предложенный вами способ   -  person Bluewings    schedule 25.05.2015
comment
@ Sega-Zero, к сожалению, это не работает должным образом. Я попробовал layoutIfNeeded для представления контейнера :(   -  person Bluewings    schedule 26.05.2015
comment
устанавливает ли ограничение высоты для imageView? Я создал пример проекта, и ваш код работает должным образом.   -  person Sega-Zero    schedule 26.05.2015
comment
@Sega-Zero теперь работает (вроде), но ширина изображения меняется во время анимации. Я знал, что это может быть проблемой с моими ограничениями. Во всяком случае, я поделился кодом здесь   -  person Bluewings    schedule 26.05.2015
comment
нет ничего плохого в ваших ограничениях. Вам просто нужно запустить анимацию в viewDidAppear, чтобы родительское представление могло правильно выровняться, прежде чем анимация начнется.   -  person Sega-Zero    schedule 26.05.2015
comment
@ Sega-Zero работает как положено. Пожалуйста, опубликуйте свое предложение в качестве ответа для будущих читателей, я также плохо приму это как ответ.   -  person Bluewings    schedule 27.05.2015


Ответы (2)


Анимация должна запускаться после viewDidAppear, чтобы родительское представление могло правильно выровняться.

person Sega-Zero    schedule 27.05.2015

Пытаться

[UIView beginAnimations:nil context:nil;
[UIView setAnimationDuration:0.5];
[self.topConstraint.animator setConstant:maxTop];
[UIView commitAnimations];

Как и в исходном коде, вы не установили константу ограничения внутри анимации.

person Luke    schedule 25.05.2015
comment
Насколько я знаю, как только вы вызвали LayoutIfNeeded... все изменения, которые мы сделали для ограничений, произойдут. Нет необходимости изменять ограничение внутри блока анимации. - person Bluewings; 26.05.2015