Ios 在计时器中运行UIView.animate

Ios 在计时器中运行UIView.animate,ios,animation,uiview,timer,Ios,Animation,Uiview,Timer,我做了一个应用程序,从数字10开始每秒钟倒计时一次。倒计时已设置动画。代码如下: import UIKit class ViewController: UIViewController { var startNumber = 10 lazy var numberLabel: UILabel = { let label = UILabel() label.translatesAutoresizingMaskIntoConstraints = f

我做了一个应用程序,从数字10开始每秒钟倒计时一次。倒计时已设置动画。代码如下:

import UIKit

class ViewController: UIViewController {

    var startNumber = 10

    lazy var numberLabel: UILabel = {
        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false
        label.font = label.font.withSize(160)
        label.textColor = .lightGray
        return label
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white

        view.addSubview(numberLabel)

        NSLayoutConstraint.activate([
            numberLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            numberLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor)
            ])

        _ = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (time) in

            self.numberLabel.text = String(self.startNumber)
            self.startNumber -= 1

            UIView.animate(withDuration: 0.99, animations: {
                self.numberLabel.alpha = 0
            }, completion: { (true) in
                self.numberLabel.alpha = 1
            })

        }
    }

}
如果UIView和计时器间隔相等,则倒计时将显示不均匀的数字动画。这就是为什么在代码中将UIView间隔设置为0.99而不是1,以显示每个数字的动画倒计时。动画仍然不平滑,因为可以在毫秒内看到数字“flick”,但我认为这是因为间隔设置为0.99而不是1

我的问题是:

1) 为什么在UIView和Timer上设置相等的间隔会导致奇数倒计时动画


2) 倒计时是每秒钟还是0.99秒倒计时

将代码更改为那样

 _ = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (time) in


        self.startNumber -= 1

         self.numberLabel.alpha = 1

        UIView.setAnimationCurve(UIViewAnimationCurve.easeInOut)

        UIView.animate(withDuration: 1, animations: {

            self.numberLabel.text = String(self.startNumber)
            self.numberLabel.alpha = 0
        }, completion: { (true) in

        })

    }

将代码更改为那样

 _ = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (time) in


        self.startNumber -= 1

         self.numberLabel.alpha = 1

        UIView.setAnimationCurve(UIViewAnimationCurve.easeInOut)

        UIView.animate(withDuration: 1, animations: {

            self.numberLabel.text = String(self.startNumber)
            self.numberLabel.alpha = 0
        }, completion: { (true) in

        })

    }
1) 为什么在UIView和Timer上设置相等的间隔会导致奇数倒计时动画

答:设置“相等时间”时,上一个动画肯定会与新动画重叠。所以最好少花点时间。甚至低于0.99

2) 倒计时是每秒钟还是0.99秒倒计时

答:无论动画定时器如何,每秒都会触发倒计时(1)为什么在UIView和定时器上设置相等的间隔会导致奇数倒计时动画

答:设置“相等时间”时,上一个动画肯定会与新动画重叠。所以最好少花点时间。甚至低于0.99

2) 倒计时是每秒钟还是0.99秒倒计时

Ans:无论动画计时器如何,每秒都会触发倒计时