静止画をビデオに変換する処理で、callbackの中で Timerが発火しない
通常、Timerを発火する場合は:
func timerStart() { let timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.onTimer), userInfo: nil, repeats: true) RunLoop.main.add(timer, forMode: RunLoopMode.commonModes) } func main() { self.timerStart() } func onTimer { // call every 100ms interval. }
これは、動作する
func timerStart() {
let timer = Timer.scheduledTimer(timeInterval: 0.1,
target: self, selector: #selector(self.onTimer), userInfo: nil, repeats: true)
RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)
}
func main() {
//
assetWriter.finishWriting(completionHandler: {
self.timerStart()
}
}
func onTimer {
// call every 100ms interval.
}
なんらかのコールバック(この場合は、ビデオの変換処理後のコールバック)の中では、Timerが開始されない
func timerStart() { let timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.onTimer), userInfo: nil, repeats: true) RunLoop.main.add(timer, forMode: RunLoopMode.commonModes) } func main() { // assetWriter.finishWriting(completionHandler: { DispatchQueue.main.async { self.timerStart() } } } func onTimer { // call every 100ms interval. }
一旦、メインスレッドに処理を渡せば動作する