DispatchQueue.main.asyncAfterが、
指定している時間よりも大幅にずれて実行されてしまう問題に直撃。
実装した処理をよくみていると、別ViewControllerから戻ってきた直後の処理がそうなっていた。
この前にカメラを使用していて、カメラを終わらせずにViewControllerに戻っていた。
これが原因、ヒントは「メインスレッド」
1. 別ViewControllerで使用しているカメラセッションを終わらせずに戻る。
2. DispatchQueueの処理がずれる。
カメラもメインスレッドで動いているので、どちらかが終わってくれないと処理できない。
だから指定した時間よりも大幅にずれて実行されてしまっていた。
落ち着いて考えたら納得なのでが、まさかカメラセッションを終わらせるのを忘れてると思っていないから、しばらく悩みました。