I am trying to convert image snapshots into a video but I am facing UI Thread problems: my view controller is locked. I would like to know how to handle this because I did a lot of research and tried to detach the process into different DispatchQueues but none of them worked. So, it explains why I am not using any Queue on the code below:
class ScreenRecorder {
func renderPhotosAsVideo(callback: @escaping(_ success: Bool, _ url: URL)->()) {
        var frames = [UIImage]()
        for _ in 0..<100 {
            let image = self.containerView.takeScreenshot()
            if let imageData = UIImageJPEGRepresentation(image, 0.7), let compressedImage = UIImage(data: imageData) {
                frames.append(compressedImage)
            }
        }
        self.generateVideoUrl(frames: frames, complete: { (fileURL: URL) in
            self.saveVideo(url: fileURL, complete: { saved in
                print("animation video save complete")
                callback(saved, fileURL)
            })
        })
    }
}
extension UIView {
    func takeScreenshot() -> UIImage {
        let renderer = UIGraphicsImageRenderer(size: self.bounds.size)
        let image = renderer.image { _ in
            self.drawHierarchy(in: self.bounds, afterScreenUpdates: true)
        }
        return image
    }
}
class ViewController {
let recorder = ScreenRecorder()
        recorder.renderPhotoAsVideo { success, url in
            if (success) {
                print("ok")
            } else {
                self.alert(title: "Erro", message: "Nao foi possivel salvar o video", block: nil)
            }
        }
}
PS: I used this tutorial as reference -> http://www.mikitamanko.com/blog/2017/05/21/swift-how-to-record-a-screen-video-or-convert-images-to-videos/
