Как правильно масштабировать UIImageView с помощью UIView animateWithDuration? - PullRequest
2 голосов
/ 16 августа 2011

Я масштабирую UIImageView, а затем возвращаю его с помощью UIView animateWithDuration с опцией UIViewAnimationOptionAutoreverse.Проблема в том, что анимация изображения немного зазубрилась (дергается) в конце анимации.Вот мой код:

[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionAutoreverse 
  animations:^{

    myImage.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.9, 0.9);}  

  completion:^(BOOL finished){if (finished){

    myImage.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);}}];

Я знаю, что что-то упустил, но не знаю с чего начать: (

ОБНОВЛЕНИЕ1: я выполняю вложенные 6 анимаций, где каждая следующая анимациявыполняется после предыдущего. Для этого я использую блочную анимацию и выполняю каждую следующую анимацию в полном блоке.

UPDATE2: я пробовал с опцией UIViewAnimationOptionRepeat, но после каждой анимации масштаба все еще есть некоторый эффект вспышки.

Ответы [ 2 ]

4 голосов
/ 16 августа 2011

UIViewAnimationOptionAutoreverse ничего не делает без использования опции UIViewAnimationOptionRepeat.Ваша анимация, как написано, уменьшит изображение до 90%, а затем вернется к 100% в блоке завершения.Возможно, вы можете следовать этой анимации с другой, которая масштабируется до 100% за четверть секунды.Как то так:

    [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut 
                 animations:^{
                     myImage.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.9, 0.9);}  
                 completion:^(BOOL finished){if (finished){

    [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut 
                     animations:^{
                         myImage.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);}  
                     completion:NULL];}}];
0 голосов
/ 05 сентября 2016

.h файл declerd.

NSInteger imgint;

.m файл в коде и попробуйте.

-(void) 
{
    [NSTimer scheduledTimerWithTimeInterval:(0.85f)target:self selector:@selector(play_btn_animation) userInfo:nil repeats:YES];   
}

-(void)play_btn_animation
{
    if(imgint == 0)
    {
        [UIView animateWithDuration:0.8
                              delay:0.0
                            options: UIViewAnimationOptionCurveEaseIn
                         animations:^{
                             img.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.8, 0.8);
                         }
                         completion:^(BOOL finished) {
                             img = 1;
                         }];

    }
    else
    {
        [UIView animateWithDuration:0.8
                              delay:0.0
                            options: UIViewAnimationOptionCurveEaseOut
                         animations:^{
                             img.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 1);
                         }
                         completion:^(BOOL finished) {
                             imgint = 0;
                         }];
    }
}
...