我有一个递归功能,我用来通过使用3张图像模拟化身闪烁。大约40%的时间,没有发生眨眼 - 即 - 图像没有更新。有人能让我知道我做错了什么吗?
func blink( _ state: Int = 0) {
var st = state
let dly: Double!
st = st%3
switch(st) {
case 0: dly = 4.0 + (Double)(rand(70)) / 10
case 1: dly = 0.05
case 2: dly = 0.1
default: dly = 2.0
}
self.avatarView.image = UIImage(named: self.name!+(String)(st+1))
self.avatarView.setNeedsDisplay()
delay(dly) { [unowned self] in
if !self.blinkOn {return}
self.blink(st+1)
}
}
func delay(_ delay:Double, weak closure:@escaping ()->()) {
print("blink", delay)
DispatchQueue.main.asyncAfter(
deadline: DispatchTime.now() + delay, execute: closure
)
}
func rand(_ num: Int) -> Int {
return Int(arc4random_uniform(UInt32(num)))
}
答案 0 :(得分:0)
尝试几件事情,这可能有用。
UIImage(named: self.name!+(String)(st+1))
返回正确的图片。我已经执行了你的代码,并发现代码工作正常,但是在案例1和案例2延迟时间太小的情况下,所以如果你增加那个延迟,你可以观察到图像正在更新。
switch(st) {
case 0: dly = 4.0 + (Double)(rand(70)) / 10
case 1: dly = 0.3
case 2: dly = 0.2
default: dly = 2.0
}
确保此情况正常。
if !self.blinkOn {return}