2016-04-24 1 views
0

У меня есть метка, которая первоначально расположена в центре экрана. В настоящее время он переходит из центра в правый конец экрана, затем автоматически возвращается в свое положение. Я хотел бы, чтобы это начало другого animateWithDuration, чтобы он продолжался от центра, возвращался в левую позицию экрана, затем автоматически возвращался в позицию и последовательно включался оттуда после.animateWithDuration один за другим

Я уже сделал попытку и успешно сделал первую половину работы, но я не уверен, как продолжить вторую часть, где он начнет переход к центру и левому краю.

Swift 2.0 Код:

func animateRight() 
    { 
     UIView.animateWithDuration(1.0, delay: 0.0, options: [ .Autoreverse, .CurveEaseInOut], animations: { 
       label.center.x = self.view.frame.width/2 
      }, completion: { finished in 
       if finished { 
        label.frame.origin.x = 0.0 
        animateLeft() 
       } 
     }) 
    } 

    func animateLeft() 
    { 
     UIView.animateWithDuration(1.0, delay: 0.0, options: [ .Autoreverse, .CurveEaseInOut], animations: { 
       label.frame.origin.x = (self.view.frame.width/2) * -1 
      }, completion: { finished in 
       if finished { 
        label.center.x = self.view.frame.width/2 
        animateRight() 
       } 
     }) 
    } 

    // Start process 
    animateRight() 

ответ

1

Вы должны вызывать тот же одушевленные с методом длительности вы создаете для анимации направо и заехать завершения. Что-то вроде этого:

func animateRight() 
{ 
    UIView.animateWithDuration(1.0, delay: 0.0, options:[], animations: { 
     self.label.center.x = self.view.frame.width 
     }, completion: { finished in 
      if finished { 
       self.animateLeft() 
      } 
    }) 
} 

func animateLeft() 
{ 
    UIView.animateWithDuration(2.0, delay: 0.0, options: [ .Autoreverse, .Repeat, .CurveEaseInOut, .BeginFromCurrentState], animations: { 
     self.label.frame.origin.x = 0.0 
     }, completion: nil) 
} 
+0

Это хорошо! Я сделал это еще дальше, но он работает неправильно. Я в порядке, весь этот цикл длится вечно, потому что это просто анимация, которая будет бесконечно повторяться для визуальных эффектов. Я обновил свой код и, в настоящее время, он запускает animateRight() и последовательно запускает animationLeft(); но animationLeft() петли и никогда не вызывает animateRight(), как ожидалось. – theflarenet

+0

Я обновил код. Таким образом, теперь одушевленный справа не использует. Автореверс, но заканчивается вправо. А затем левую анимацию вызывают с .Autoreverse и .Repeat –

+1

Отлично! Спасибо! – theflarenet