2015-06-24 1 views
-2

У меня есть следующая анимация, которую я хочу обойти, пока я не нажму кнопку, тогда я хочу, чтобы она прекратила анимацию. Дело в том, что, когда я нажимаю кнопку несколько раз, анимация просто странная и из-за ее скорости ... Любая помощь, чтобы исправить это и сделать ее более жидкой и нормальной? Спасибо! Вот мой код:UIAnimation loop бесконечно, пока я не нажму кнопку ... Как?

func animate(){ 

    UIView.animateWithDuration(3, animations: {self.blueBar.center = CGPointMake(self.blueBar.center.x + 550, self.blueBar.center.y + 550) 
     }, completion: {(value: Bool) in 
      if !self.buttonHasBeenPressed { 
       self.animate() 
      } 
    }) 
} 

EDIT: Код для действия, которое запускает и останавливает анимацию:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    if !timerIsGoing { 

     buttonHasBeenPressed = false 

     animate() 

     futureTime = NSDate.timeIntervalSinceReferenceDate() + 5.0000000 

     timer = NSTimer.scheduledTimerWithTimeInterval(
      0.02, 
      target: self, 
      selector: ("update"), 
      userInfo: nil, 
      repeats: true) 


    } else { 

     if labelValue != 0.00000 { 

     } else { 

     } 
     timer.invalidate() 
     if labelValue == -0 { 
      labelValue = 0 
     } 
     labelTime.text = String(format: "%0.5f", labelValue) 

     buttonHasBeenPressed = true 


     timerIsGoing = false 

    } 
+0

«Когда я нажимаю кнопку несколько раз, анимация просто странная и из-за ее скорости ...» Ну, это ясно, как грязь. Что это должно значить? Если проблема связана с нажатием кнопки, вам необходимо предоставить подробную информацию о том, что происходит, когда вы нажимаете кнопку. Связано ли это с IBAction? Поэтому отправьте код для этого IBAction. Связано ли это с сеге? Скажи нам это. Если код кнопки устанавливает только флаг 'buttonHasBeenPressed', тогда ваш код должен просто останавливать анимацию, когда текущая итерация заканчивается, поэтому происходит больше событий, о которых ваши читатели не могут знать, если вы не сообщите нам об этом. –

+0

Ок, я сожалею, плохо отредактировал сообщение! Спасибо –

ответ

0

Что о попытке удалить анимацию, связанные с вашей точки зрения, когда вы нажимаете на кнопку?

yourView.layer.removeAllAnimations() 

Вам необходимо сбросить точку self.blueBar.center к исходному значению, если вы повторно запустить анимацию.

Но вы должны лучше использовать Core Animation, чтобы иметь больше контроля на анимации

+0

Мне кажется, что я не могу сделать этот метод removeAllAnimations, его нет для меня! –

0

Ваш код перемешаны беспорядок.

Текущая проблема выглядит так, как будто это ваши прикосновения. Метод Bedgan никогда не устанавливает timerIsGoing в true, поэтому, если вы снова нажмете кнопку, он вызывает второй раз animate().

Почему вы используете touchhesBegan на кнопке? В каком классе находится этот код? Пользовательский подкласс UIButton? Ваш контроллер просмотра?

Имеет смысл иметь код кнопки в методе IBAction, привязанный к событию touchUpInside от кнопки.

+0

Это беспорядок, потому что я взял много вещей в моем коде, чтобы поместить сюда. Я делаю это правдивым, я случайно удалил его! Я использую touchhesBegan, чтобы распознать прикосновение в фоновом режиме, это моя кнопка в основном –

+0

Если вы хотите помочь дьяволу в деталях. Вы не можете вставить «код выглядит вроде этого» и ожидать значимой помощи. «Это моя кнопка в основном?» Что это значит? –

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