Почему animateWithDuration исчезает, но не исчезает?

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

У меня есть счетчик и две метки:

var timer = NSTimer()
var timerCount = 0
@IBOutlet weak var bannerLabel: UILabel!
@IBOutlet weak var messageLabel: UILabel!

У меня есть NSTimer, который вызывает метод подсчета (countingUp), где мой timerCount переменная увеличивается. Конечно, метод срабатывает каждую секунду, как и следовало ожидать. countingUp метод вызывает метод с именем updateLabels (каждую секунду).

func countingUp() {
    // other irrelevant stuff
    updateLabels()
    timerCount++
}

func updateLabels() {           
   if timerCount == 1 {          
       animateMessage(messageLabel, delay: 7.0)
       animateBanner(bannerLabel, delay: 7.0)
       bannerLabel.text = "Message 1"
       messageLabel.text = "Blah Blah"
   }       
   // quite a few more of these conditions, though
   // I use a switch in my app.   
}

И вот мои методы анимации:

    func animateBanner(banner: UILabel, delay: Double){  
        UIView.animateWithDuration(1.2, animations: {
            banner.alpha = 1.0
        })

        if delay > 0.0 {
            UIView.animateWithDuration(3, delay: delay, options: [], animations: {
            banner.alpha = 0.1

            }, completion: nil)
         }
    }

    func animateMessage(label: UILabel, delay: Double){
        label.alpha = 0.0
        UIView.animateWithDuration(1.2, animations: {
            label.center.y -= 20
            label.alpha = 1.0
        })

        UIView.animateWithDuration(1.2, delay: delay, options: [], animations: {
            label.alpha = 0.1

            }, completion: nil)
    }

Чтобы доказать, что мой метод вызывается и что мой ярлык действительно находится на альфа 0 Я сделал снимок экрана:

Мой вопрос:

Мои анимации прекрасно исчезают, но они никогда не исчезают, они просто появляются. Что является причиной этого?

1 ответ

Решение

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

func animateMessage(label: UILabel, delay: Double){
        label.alpha = 0.0 
        //1 - Start animation 1
        UIView.animateWithDuration(1.2, animations: {
            //3 - Finish animation 1
            label.center.y -= 20
            label.alpha = 1.0
        })
        //2 - Start animation 2
        UIView.animateWithDuration(1.2, delay: delay, options: [], animations: {
             //4 - Finish animation 2
             label.alpha = 0.1
            }, completion: nil)
    }

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

func animateMessage(label: UILabel, delay: Double){
        label.alpha = 0.0 
        UIView.animateWithDuration(1.2, delay: delay, options: [], animations: {
            label.center.y -= 20
            label.alpha = 1.0
        }, completion:{finished in
            if (finished) {
                UIView.animateWithDuration(1.2, delay: delay, options: [], animations: {
                     label.alpha = 0.1
                    }, completion: nil)
             }
    })
Другие вопросы по тегам