2014-11-24 4 views
0

У меня есть UIView называется волной и имеет приятную бесконечную «плавающую» анимациюIOS добавления второй анимации уже анимированный UIView

[UIView animateWithDuration:1 
         delay:0 
        options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 

        CGPoint center = waves.center; 
        center.y += 5; 
        waves.center = center; 

       } 
       completion:nil]; 

Теперь, если я добавлю еще одну анимации, скажем, перемещение этой точки зрения к другому местоположение, «плавающие» анимации останавливаются. Это разумная реакция, и не стоит начинать «плавание» снова в блоке завершения. Мне просто интересно, не хватает ли я чего-то, возможно, в настройках анимации, чтобы объединить их так, чтобы они не прерывали друг друга.

Я был в состоянии сделать это, если вторая анимация основана на CGAffineTransfromScale, они не имеют проблем, но когда я перемещаю центр представления, это не так.

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

- (void)wavesAnimationReversed:(BOOL)reversed { 

    CGFloat y = waves.frame.size.height*0.25; 
    y = reversed ? -y : y; 
    // CGFloat damping = reversed ? 1 : 0.65; 
    CGFloat damping = 1;  

    [UIView animateWithDuration:kWAVES_ANIMATION_DURATION 
          delay:0 
     usingSpringWithDamping:damping 
      initialSpringVelocity:0 
         options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 

         CGPoint center = waves.center; 
         center.y += y; 
         waves.center = center; 

        } 
        completion:^(BOOL finished) { 
         [self handleStartWavesFloating]; 
        }]; 
} 
+0

Как насчет флага 'UIViewAnimationOptionBeginFromCurrentState'? –

+0

@GuyKogus nope, не делает трюка – NKorotkov

+0

Что касается вашего обновления, если вы не хотите, чтобы привязка появлялась, проверьте, действительно ли 'finished' (true) (или' YES'). Кроме того, если анимация преобразований работает, почему бы не попробовать использовать CGAffineTransfromTranslate в блоке анимации? –

ответ

0

Если вы хотите выполнить несколько анимаций, вы должны использовать animateKeyFrames. Говорят, что вы не можете анимировать то, что анимируется (ваше описание идеально соответствует тому, что произойдет). То есть, поскольку значения из вашего представления уже изменены (это реальные значения), анимация происходит из-под вашего контроля.

Поэтому, если вы создаете новую анимацию, значения по умолчанию являются конечными значениями вашей первой анимации, когда вторая анимация срабатывает, она автоматически переместит представление в новое место, чтобы запустить вторую анимацию.

+0

Я считаю, что это правильно, единственная причина, по которой вы можете комбинировать масштабирование и перемещать анимацию, заключается в том, что они меняют разные свойства фрейма объекта. – NKorotkov

+0

@NKorotkov это правда, но если вы это делаете, вы делаете внутри того же блока анимации UIView. – wolffan

Смежные вопросы