Я сделал собственное приложение камеры и использовал фоновый поток для al oop, содержащий задержку. Если бы задержка была в основном потоке, она прервала бы AVCaptureSession
.
Я хочу вернуться на ViewController
(домашняя страница приложения), когда мой l oop закончится.
func takeAllPictures() {
DispatchQueue.global(qos: .background).async {
let frequency = Double(self.pictureFreq)!
let x = UInt32(frequency)
let totalTimes = Double(self.pictureTotalTime)! //number of pics
var picsLeftCount = totalTimes
while picsLeftCount > 0{
sleep(x)
self.takePicture()
picsLeftCount = picsLeftCount - 1
}
self.goBackHome()
}
}
func goBackHome() {
let viewController = storyboard?.instantiateViewController(identifier: Constants.StoryBoard.viewController) as? ViewController
view.window?.rootViewController = viewController
view.window?.makeKeyAndVisible()
}
Мой l oop работает, пока не придет время goBackHome()
, где я получаю фатальную ошибку, говоря, что я могу выполнить goBackHome()
только из основного потока.
Есть ли способ, которым я могу может выполнять goBackHome()
или изменять контроллеры представления из фонового потока?
Я пробовал использовать внешние функции, но они все еще работают в фоновом потоке.