首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确阻止AVCaptureSession

如何正确阻止AVCaptureSession
EN

Stack Overflow用户
提问于 2014-02-18 04:55:22
回答 2查看 2.3K关注 0票数 1

我正在做一个需要验证QR代码的iOS应用程序,其层次结构如下:

代码语言:javascript
复制
View
---Scan View
---Image View - cardBG
---Inside View
  1. 当视图加载时,扫描视图被隐藏。
  2. 当用户单击按钮进行扫描时,内部视图和图像视图被设置为隐藏,显示扫描视图。
  3. 扫描返回成功后,内部和图像再次出现。

问题在第3步:当我停止AVCaptureSession时,即使是在in this question这样的异步调度中,刷新视图也需要8-10秒。

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    if([_captureSession isRunning])[_captureSession stopRunning];
    AVCaptureInput* input = [_captureSession.inputs objectAtIndex:0];
    [_captureSession removeInput:input];
    AVCaptureVideoDataOutput* output = (AVCaptureVideoDataOutput*)[_captureSession.outputs objectAtIndex:0];
    [_captureSession removeOutput:output];
});

[self.bgImageView setHidden:NO];
[self.insideView setHidden:NO];
[self.scanView setHidden:YES];
[self.previewLayer removeFromSuperlayer];

我的问题是:我如何才能避免这种冻结呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-18 05:02:37

没有更多的背景就很难说了。这取决于究竟是什么导致了延迟。像这样的东西有用吗?

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    if([_captureSession isRunning])[_captureSession stopRunning];

    dispatch_async(dispatch_get_main_queue(), ^{
      [self.bgImageView setHidden:NO];
      [self.insideView setHidden:NO];
      [self.scanView setHidden:YES];
      [self.previewLayer removeFromSuperlayer];        
    });

    AVCaptureInput* input = [_captureSession.inputs objectAtIndex:0];
    [_captureSession removeInput:input];
    AVCaptureVideoDataOutput* output = (AVCaptureVideoDataOutput*)[_captureSession.outputs objectAtIndex:0];
    [_captureSession removeOutput:output];    

});
票数 2
EN

Stack Overflow用户

发布于 2014-02-18 05:13:33

以下代码将对您有所帮助:

代码语言:javascript
复制
if(self.previewLayer) {
    [self.previewLayer removeFromSuperlayer];
    self.previewLayer = nil;
}

if(_captureSession) {
    [_captureSession stopRunning];
    _captureSession = nil;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21844675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档