Ios ui按钮/ui视图。设置动画使按钮按顺序闪烁
我正在用swift制作一个simon游戏,其中信号以enum[绿色、黄色、红色、红色、蓝色]给出。。。我想让按钮在信号发出时闪烁。我用来使按钮闪烁的代码是Ios ui按钮/ui视图。设置动画使按钮按顺序闪烁,ios,swift,xcode,Ios,Swift,Xcode,我正在用swift制作一个simon游戏,其中信号以enum[绿色、黄色、红色、红色、蓝色]给出。。。我想让按钮在信号发出时闪烁。我用来使按钮闪烁的代码是 扩展按钮{ func blink(){ self.alpha=0.0; UIView.animate(持续时间:0.6,//您想要的持续时间, 延迟:0.0, 选项:[.curveEaseInOut、.autoreverse], 动画:{self?.alpha=1.0}中的[弱自我], 完成:{[弱自]uuin self?.alpha=1.0
扩展按钮{
func blink(){
self.alpha=0.0;
UIView.animate(持续时间:0.6,//您想要的持续时间,
延迟:0.0,
选项:[.curveEaseInOut、.autoreverse],
动画:{self?.alpha=1.0}中的[弱自我],
完成:{[弱自]uuin self?.alpha=1.0})
}
}
在我的give信号函数中,我正在做
func-giveSignal(){
禁用按钮()
信号=[]
对于0中的uu…levelNum{
//stopplingall()
让randomSignal:Int=randomSource.nextInt(上限:4)
开关随机信号{
//绿色的
案例0:
green.blink()
signals.append(Block.green)
//green.stoppling()
//红色的
案例1:
红色闪烁
signals.append(Block.red)
//红色
//黄色的
案例2:
黄色。闪烁()
信号。追加(块。黄色)
//黄色。停止闪烁()
//蓝色的
案例3:
blue.blink()
signals.append(Block.blue)
//蓝色。停止闪烁()
违约:
打破
}
}
让finalSeq:String=makeString()
statusBar.text=finalSeq
}
但如果给出的信号为[绿色、黄色、红色],例如,所有绿色、黄色、红色按钮同时闪烁。如何修复此问题以使按钮一个接一个地闪烁?首先,向
闪烁添加一个完成处理程序,因为我们只在上一次闪烁完成后才开始下一次闪烁
extension UIButton {
func blink(completion: @escaping () -> Void) {
self.alpha = 0.0;
UIView.animate(withDuration: 0.6, //Time duration you want,
delay: 0.0,
options: [.curveEaseInOut],
animations: { self.alpha = 1.0 },
completion: { _ in
UIView.animate(withDuration: 0.6,
delay: 0.0,
options: [.curveEaseInOut],
animations: { self.alpha = 0.0 },
completion: { _ in completion() })
})
}
}
然后,编写一个函数,该函数接受一个[Block]
和一个索引,在该索引处闪烁按钮。请注意,在完成blink()
调用时,我如何再次传递调用blink(at:in:)
的闭包:
func blink(at index: Int, in signals: [Block]) {
guard index < signals.count else { return }
let completion = { blink(at: index + 1, in: signals) }
switch (signals[index]) {
case .green: green.blink(completion: completion)
case .red: red.blink(completion: completion)
case .yellow: yellow.blink(completion: completion)
case .blue: blue.blink(completion: completion)
}
}
首先,将完成处理程序添加到闪烁
,因为我们只在上一次闪烁完成后才开始下一次闪烁
extension UIButton {
func blink(completion: @escaping () -> Void) {
self.alpha = 0.0;
UIView.animate(withDuration: 0.6, //Time duration you want,
delay: 0.0,
options: [.curveEaseInOut],
animations: { self.alpha = 1.0 },
completion: { _ in
UIView.animate(withDuration: 0.6,
delay: 0.0,
options: [.curveEaseInOut],
animations: { self.alpha = 0.0 },
completion: { _ in completion() })
})
}
}
然后,编写一个函数,该函数接受一个[Block]
和一个索引,在该索引处闪烁按钮。请注意,在完成blink()
调用时,我如何再次传递调用blink(at:in:)
的闭包:
func blink(at index: Int, in signals: [Block]) {
guard index < signals.count else { return }
let completion = { blink(at: index + 1, in: signals) }
switch (signals[index]) {
case .green: green.blink(completion: completion)
case .red: red.blink(completion: completion)
case .yellow: yellow.blink(completion: completion)
case .blue: blue.blink(completion: completion)
}
}
谢谢你,这很有效!另外,我的眨眼动画非常起伏,眨眼两次。你知道如何使它更干净吗?我只想眨眼。@JiwooLee显然是,autoreverse
。因此,我认为您应该在blink()
方法中运行两个动画,而不是使用autoreverse
@JiwooLee查看编辑。我已将blink
更改为不使用autoreverse
。工作正常!再次感谢:)谢谢你,它起作用了!另外,我的眨眼动画非常起伏,眨眼两次。你知道如何使它更干净吗?我只想眨眼。@JiwooLee显然是,autoreverse
。因此,我认为您应该在blink()
方法中运行两个动画,而不是使用autoreverse
@JiwooLee查看编辑。我已将blink
更改为不使用autoreverse
。工作正常!再次感谢:)