Как остановить анимацию при нажатии - PullRequest
0 голосов
/ 30 мая 2019

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

В настоящее время он работает медленно до такой степени, что пропускает касания, если снова нажимать, пока анимация продолжается.

@IBAction func slimeTap(_ sender: UIButton) {
    tapCount += tapIncrease
    checkLevel(tapCount)
    UIView.animate(withDuration: 0.03, animations: {
        //shrink
        self.playSound()
        sender.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
    }, completion: {_ in
        //change it back to how it was
        //grow
        UIView.animate(withDuration: 0.05, animations: {
           sender.transform = CGAffineTransform(scaleX: 1, y: 1)
        })
    })
}

1 Ответ

2 голосов
/ 30 мая 2019

Попробуйте добавить .layer.removeAllAnimations(), чтобы удалить все существующие анимации на слое, и .allowUserInteraction в качестве опции анимации, чтобы включить и зарегистрировать события касания пользователя:

@IBAction func slimeTap(_ sender: UIButton) {
    tapCount += tapIncrease
    checkLevel(tapCount)

    resizingView.layer.removeAllAnimations()

    UIView.animate(withDuration: 0.3, delay: 0, options: [.allowUserInteraction], animations: {
        self.playSound()
        sender.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
    }) { _ in
        UIView.animate(withDuration: 0.5, delay: 0, options: [.allowUserInteraction], animations: {
            sender.transform = CGAffineTransform(scaleX: 1, y: 1)
        })
    }
}
...