Анимация не работает в UIImageView

У меня есть UIImageView, добавленный в качестве подвида. Я пытаюсь анимировать его с помощью преобразования. Анимация не работает, однако изображение правильно масштабируется, оно просто не реверсируется. Я делаю что-то неправильно?

UIImageView * iv_tap = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"gesture_tap"]];
    iv_tap.center = point;
    iv_tap.tag = 779;
    iv_tap.hidden = true;
    [UIView animateWithDuration:2.0
                          delay:.05
                        options: UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveLinear
                     animations:^{
                         iv_tap.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.8, 1.8);
                     }
                     completion:NULL];


    [self addSubview:iv_tap];

person user-44651    schedule 18.12.2015    source источник


Ответы (1)


Вам нужно сделать анимацию после того, как вы добавите imageView в view. Если вы делаете анимацию до addSubView, где в точке, представление изображения не находится в иерархии представлений, и вы не можете видеть никакой анимации.

 UIImageView * iv_tap = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"gesture_tap"]];
[self.view addSubview:iv_tap];   //this could be self in your case
iv_tap.tag = 779; 

[UIView animateWithDuration:2.0 delay:0.05  options:UIViewAnimationOptionCurveEaseOut animations:^{

    iv_tap.center=self.view.center;
    iv_tap.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.8, 1.8);

    [self.view layoutIfNeeded];    //this could be self in your case

} completion:^(BOOL finished) {
        //do your stuff when animation is done
}];

Если вы создаете подкласс UIView, вы можете даже поместить это в метод drawRect:

UIImageView * iv_tap = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"gesture_tap"]];
[self addSubview:iv_tap];   
iv_tap.tag = 779;

[UIView animateWithDuration:2.0 delay:0.05  options:UIViewAnimationOptionCurveEaseOut animations:^{

    iv_tap.center=self.center;
    iv_tap.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.8, 1.8);

    [self layoutIfNeeded];   

} completion:^(BOOL finished) {
        //do your stuff when animation is done
 }];
person Teja Nandamuri    schedule 18.12.2015
comment
На самом деле это ничего не дало. - person user-44651; 18.12.2015
comment
вызов макета, если необходимо, после анимации - person Teja Nandamuri; 18.12.2015
comment
Я вызвал [iv_tap layOUtIfNeeded], и это тоже не сработало. - person user-44651; 18.12.2015
comment
обновил ответ @Firemarble. Это работает для меня - person Teja Nandamuri; 18.12.2015
comment
нет, не изображение, вам нужно обновить макет self.viewq, если это необходимо - person Teja Nandamuri; 18.12.2015
comment
вы можете изменить параметры анимации в соответствии с вашими потребностями - person Teja Nandamuri; 18.12.2015
comment
Мой UIView был подклассом. Размещение его в DrawRect сработало. Но я использую анимацию в других частях приложения, и мне не нужно использовать метод DrawRect. Как вы думаете, почему это было бы? Я не делал никакой другой инициализации, которую я делал с другими UIViews. - person user-44651; 20.12.2015