Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVCaptureSession暂停会话_Ios_Swift_Xcode_Avfoundation_Avcapturesession - Fatal编程技术网

Ios AVCaptureSession暂停会话

Ios AVCaptureSession暂停会话,ios,swift,xcode,avfoundation,avcapturesession,Ios,Swift,Xcode,Avfoundation,Avcapturesession,当我想暂停会话时,这是我唯一的解决方案: func pauseSession () { self.sessionQueue.async { if self.session.isRunning { self.session.stopRunning() } } } func resumeSession () { s

当我想暂停会话时,这是我唯一的解决方案:

func pauseSession () {
            self.sessionQueue.async {
                if self.session.isRunning {
                     self.session.stopRunning()
                }
            }
    }

func resumeSession () {
            self.sessionQueue.async {
                if !self.session.isRunning {
                    self.session.startRunning()
                }
            }
}
这似乎完全停止了会话,这很好,但看起来很昂贵

我似乎遇到的问题是,如果暂停和恢复在时间上彼此接近,整个应用程序会冻结大约10秒钟,直到恢复响应。这主要是因为它还没有完成最后一个过程(是停止还是启动)

有解决办法吗


本机摄像头应用程序似乎可以做到这一点。如果打开它,打开最后一张照片,您可以看到右上角的绿色指示灯熄灭,表示会话已暂停/停止。如果您向下滑动照片,会话将继续。如果您刷卡并取消,请再次快速刷卡,您可以看到会话一次又一次地快速暂停和恢复,没有任何问题。

您可能需要将
async
更改为
sync

self.sessionQueue.sync {

这不会阻塞主队列。它将序列化
sessionQueue
对主队列没有影响。在启动和停止时,它实际上会将UI冻结几秒钟。提到:startRunning()方法是一个阻塞调用,可能需要一些时间,因此您应该在串行队列上执行会话设置,以便主队列不会被阻塞(这会使UI保持响应)。您是否检查了它在未连接调试程序的发布版本中的行为?