gpt4 book ai didi

ios - 如何正确停止 AVCaptureSession

转载 作者:行者123 更新时间:2023-12-01 19:02:39 42 4
gpt4 key购买 nike

我正在做一个 iOS 应用程序,需要使用这样的层次结构对 QR 码进行验证:

View
---Scan View
---Image View - cardBG
---Inside View
  • 加载 View 时,扫描 View 被隐藏。
  • 当用户单击按钮进行扫描时,内部 View 和 ImageView 被设置为隐藏,显示扫描 View 。
  • 扫描返回成功后,再次出现Inside和Image。

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

    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];

    我的问题是:如何才能避免这种卡住?

    最佳答案

    没有更多的上下文很难说。取决于实际导致延迟的原因。像这样的东西会起作用吗?

    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];

    });

    关于ios - 如何正确停止 AVCaptureSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21844675/

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