gpt4 book ai didi

ios - 如何在 Swift 的后台线程上更新 UI?

转载 作者:搜寻专家 更新时间:2023-10-31 22:21:34 24 4
gpt4 key购买 nike

嗨,我是 swift 的新手,我想在后台运行一个函数,我的问题是一旦函数运行,应用程序就会卡住,直到函数结束我才能使用界面。

StartStream 是一个按钮,它将调用函数 self.StreamCam 以流式传输相机,然后它将当前 View 移动到 CAMView查看相机界面。

这是我用来调用该函数的内容:

@IBAction func StartStream(sender: UIButton) {

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("CAMView") as! CAM

let seconds = 2.0
let delay = seconds * Double(NSEC_PER_SEC)
let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))

dispatch_after(dispatchTime, dispatch_get_main_queue(), {
self.StreamCam(self.session)
})

dispatch_async(dispatch_get_main_queue(), {
self.presentViewController(nextViewController, animated:true, completion:nil)});
});

}

有什么建议吗?

最佳答案

您正在打破在主线程之外弄乱 UI 对象的黄金法则。永远,永远不要那样做。在后台执行工作并在主队列上更新您的 UI。 UI/ View Controller / Storyboard的东西不是线程安全的。

在您的情况下,您正在尝试从后台队列中的 Storyboard加载 View / View Controller 程序集。这是你的问题。

关于ios - 如何在 Swift 的后台线程上更新 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34452255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com