按下按钮时快速闪烁或闪烁 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.1
或0.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 种随机颜色的主要内容,如果未能解决你的问题,请参考以下文章