我想循环 dispatch_after 来循环显示这样的图像:
while isRunning {
let delay = Int64(Double(NSEC_PER_SEC) * settings.delay)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay), dispatch_get_main_queue(), {
dispatch_async(dispatch_get_main_queue(), {
self.showNextImage()
})
})
}
它应该每 delay
秒调用一次 showNextImage
。但它陷入无限循环而不显示图像。我不知道如何解决这个问题。感谢您的帮助。
最佳答案
Loop 正在调度无限 dispatch_after 因为 isRunning 是 yes 并且 loop 没有等待,最好放一些计数 (i<10) 或使用 NSTimer 到特定条件然后失效。
if (self.stimerShowNextImage.isValid) {
[self.stimerShowNextImage invalidate];
self.stimerShowNextImage = nil;
}
self.stimerShowNextImage = [NSTimer scheduledTimerWithTimeInterval: 5
target: self
selector: @selector(showNextImage)
userInfo: nil
repeats: YES];
上面是延迟 5 秒的 timerCode,在 ViewWillDisapper 中你需要使它失效,另外在安排定时器之前你需要检查它是否已经运行。
关于ios - 如何循环 despatch_after,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38758711/