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

Posted

技术标签:

【中文标题】按下按钮时快速闪烁或闪烁 2 种随机颜色【英文标题】:swift flash or blink 2 random colors when the button is pressed 【发布时间】:2021-04-16 19:56:43 【问题描述】:

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

导入 UIKit

类视图控制器: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)
    

【问题讨论】:

删除你的动画选项。 我这样做了,但背景没有继续闪烁?你能帮我吗 :( 删除此options:[UIView.AnimationOptions.autoreverse] 并将其设置为[] 或如果可能将其设置为nil 哦,请稍等。它不闪烁,您希望它闪烁。一分钟。 上帝保佑你,我会等待 【参考方案1】:

首先设置一个计时器,因为您将一直运行动画,直到单击按钮。在 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)
    

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

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

【讨论】:

哇,感谢您的宝贵时间!让我看看它是否有效:) 那里可能有一些语法错误,我确实是在我的脑海中做了所有这些。 我收到一个自定义计时器的错误代码 :( 有没有你可以编写整个代码?这会很有帮助 哦,我知道不用担心,谢谢您的宝贵时间,这对您有很大帮助! 自定义计时器的东西

以上是关于按下按钮时快速闪烁或闪烁 2 种随机颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何使按钮闪烁或闪烁?

react-native TouchableHighlight 禁用 onPress 颜色闪烁

尝试简单的 QPushButton 背景颜色更改 [重复]

单击一个时如何禁用其他星星上闪烁的颜色/动画?

OpenGl和闪烁

为什么按钮会闪烁?