按下按钮时快速闪烁或闪烁 2 种随机颜色

时间:2021-04-16 19:56:43

标签: ios swift macos

您好,此应用程序当前以空白的黑色屏幕开始,当您按下屏幕中间的按钮时,它会将背景更改为随机颜色。我想从黑屏中的一条消息开始,说“警告可能会导致癫痫发作”,一旦第一次按下按钮,消息就会消失,背景将永远闪烁或闪烁 2 种随机颜色,直到按下按钮再次。当再次按下按钮时,它会闪烁或闪烁 2 种新的随机颜色等等。我希望这不会令人困惑,这真的很容易,我只是想不通:( 请帮忙

导入 UIKit

class ViewController: UIViewController {

let colors: [UIColor] = [
    .systemYellow,
    .systemGreen,
    .systemPurple,
    .systemPink,
    .systemRed,
    .systemBlue,
    .systemOrange,
    .black,.gray
        
    
    ]
override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .clear
    
}

@IBAction func didTapButton() {
    
    UIView.animate(withDuration: 1/12, delay:0, options:[UIView.AnimationOptions.autoreverse], animations: {
           self.view.backgroundColor = self.colors.randomElement()
           self.view.backgroundColor = self.colors.randomElement()           }, completion: nil)
    
}

}

1 个答案:

答案 0 :(得分:0)

首先设置一个计时器,因为您将一直运行动画直到点击按钮。在 ViewDidLoad() 中,这将启动计时器。

var timer: customTimer = Timer()
var isAnimating = false

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .clear
    startAnimation()
    
}

我们用 startAnimation() 启动计时器,它每 1 秒执行一次代码。这是 double,因此您可以将其设置为几分之一秒,例如 0.10.001 请注意,数字越小,资源越密集。

func startAnimation() {
        customTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { timer in
         UIView.animate(withDuration: 1/12, delay:0, options:[UIView.AnimationOptions.autoreverse], animations: {
               self.view.backgroundColor = self.colors.randomElement()
               self.view.backgroundColor = self.colors.randomElement()           }, completion: nil)
    }
}

计时器可以失效,因此只要您需要停止它们,就可以“停止”。只需确保您没有 nil 计时器,否则它会崩溃。您可以创建一个带有 var animationRunning = false 的标志,然后切换它以使按钮打开/关闭动画。

@IBAction func buttonTapped() {
    isAnimating = !isAnimating
    if isAnimating { customTimer.start() }
    else { customTimer.invalidate() }
}