Повторение анимации с функцией выполнения и обновлением пользовательского интерфейса - PullRequest
0 голосов
/ 20 марта 2019

Я делаю игру, подобную AdVenture Capitalist, и я сталкиваюсь с этой проблемой.

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

func animate(){
     UIView.animate(withDuration: 3, animation{
              self.animated.frame.size.width += 200
              self.animated.backgroundColor = UIColor(red: 0, green: 1, blue: 0, alpha: 0.5)
             }, completion: {
            (end: Bool)->Void in
            self.animated.frame.size.width = 0
            self.sumFunc()
            self.updateLabel()
            })

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

func animateInfinite(){
     UIView.animate(withDuration: 3, delay: 0, options: .repeat, animations: {
      self.animated.frame.size.width += 200
      self.animated.backgroundColor = UIColor(red: 0, green: 1, blue: 0, alpha: 0.5)
      // when I put sumFunc here and updateFunc here, the app breaks, and will not compile
     }, completion: {
            (end: Bool)->Void in
        // when I put sumFunc here and updateFunc here, the app runs, but it never executes, because I have noticed that .repeat animation never has a completion.

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

1 Ответ

1 голос
/ 20 марта 2019
class YourClass  {

 var isAnimationStop = false

 override func viewDidAppear(_ animated: Bool) {
  super.viewDidAppear(animated)
  startanimation()
 }

 func startanimation(){
   UIView.animate(withDuration: 2, animations: {
   self.animated.frame.size.width += 10
   self.animated.backgroundColor = UIColor(red: 0, green: 1, blue: 0, alpha: 0.5)
   }, completion: {_ in
   self.animated.frame.size.width = 0
   if !self.isAnimationStop{
     self. startanimation()
     self.sumFunc()
     self.updateLabel()
   }
  })
 }

// call stop when you want
 func stopAnimation()  {
  self.isAnimationStop = true
 }
}
...