为什么在AVCaptureVideoPreviewLayer顶部显示我的按钮文字?

时间:2016-12-19 17:20:20

标签: ios objective-c xcode uibutton

我有一个QR Code Scanner视图,其中我有一个AVCaptureVideoPreviewLayer和一个UIButton。

显示此视图时,按钮中的文本不会显示。它应该显示“取消”一词。如果我触摸按钮或滑动按钮 - 但不点击它,按钮文本将显示在该点。

有谁知道如何让按钮文字正确显示?

以下是我的视图层次结构:

enter image description here

当我第一次进入扫描仪视图时,按钮如下所示:

enter image description here

没有文字。只有在我触摸按钮后,文本才会显示:

enter image description here

最后一件事,似乎这只是一个问题,只有iOS 10 ......

欢迎任何建议。谢谢!

3 个答案:

答案 0 :(得分:0)

是。您需要添加叠加视图。

包含视频预览和叠加视图的主视图。 叠加视图包含按钮。

对于每个按钮,如果要进行动画处理,可以使用这些事件:

  • TouchDown的
  • TouchUpInside
  • TouchOutInside

答案 1 :(得分:0)

作为AVCaptureSession状态的文档,startRunning()调用会阻塞主线程,因此无法正确绘制UI。

  

startRunning()方法是一个阻塞调用,可能需要一些时间,   因此,您应该在串行队列上执行会话设置   主队列未被阻止(这使得UI保持响应)。看到   AVCam-iOS:使用AVFoundation捕获图像和电影   实施例。

如果查看Apple的示例(Swift 3和Objective-C),您可以轻松地为这些操作设置新队列,而不会阻塞主线程。

如果您需要,这是Swift 2.3的示例。

// Swift 2.3

private let sessionQueue = dispatch_queue_create("session queue", nil)

override func viewDidLoad() {
    super.viewDidLoad()

    dispatch_async(sessionQueue) { 
        self.configureSession()
    }

    dispatch_async(dispatch_get_main_queue()) { 
        self.setupScreen()
    }
}

答案 2 :(得分:0)

使用layer.insertSublayer(...,上面:...)或layer.insertSublayer(...,下面:...)来控制你的CALayers 这是类似的答案link或  有关Swift如何在视频流manual

的顶部插入图像的详细说明