ios - 覆盖 AVCaptureVideoPreviewLayer

标签 ios swift uiview overlay avcapture

我正在尝试在我的视频预览图层上创建叠加层。我尝试了以下方法。但我的叠加 View 没有显示在预览图层的顶部。它只是显示一个空白屏幕。

CameraOverlayView 包含我的设计

    let previewLayer: AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: self.avCaptureSession)

    previewLayer.frame = self.view.layer.frame

    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill

    self.view.layer.addSublayer(previewLayer)

    let cameraOverlay = CameraOverlay(nibName:"CameraOverlay",bundle: nil)

    let cameraOverlayView:CameraOverlayView = cameraOverlay.view as! CameraOverlayView

    self.view.addSubview(cameraOverlayView)

    cameraOverlayView.layer.addSublayer(previewLayer)        

    self.view.bringSubviewToFront(cameraOverlayView)

但是,当我在预览层上添加单独的按钮和 UIView 时,它们是可见的。

但是我想显示很多这样的 View 作为叠加层,并且我还想添加约束。如果我能够将我的 Nib 添加为覆盖层,那就容易多了。

    let previewLayer: AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: self.avCaptureSession)

    previewLayer.frame = self.view.layer.frame
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    self.view.layer.addSublayer(previewLayer)

   //Add Rectangle
    var cgRect = CGRectMake(0, 0, previewLayer.frame.width * (3/4) , previewLayer.frame.height)
    let myView = UIImageView()
    myView.frame = cgRect
    myView.backgroundColor = UIColor.clearColor()
    myView.opaque = false
    myView.layer.cornerRadius = 10
    myView.layer.borderColor = UIColor.blackColor().CGColor
    myView.layer.borderWidth = 3
    myView.layer.masksToBounds = true
    //previewLayer.addSublayer(myView.layer)
    //Add Rectangle

    //Add Button
    let captureButton = UIButton(frame: CGRectMake(0, 0, 100 , 100))
    captureButton.backgroundColor = UIColor.grayColor()
    captureButton.setTitle("Capture", forState: .Normal)
    captureButton.setTitleColor(UIColor.redColor(), forState: .Normal)
    captureButton.addTarget(self, action: "actionCapture:", forControlEvents: .TouchDragInside)

    let previewView = UIView(frame: view.frame)
    view.addSubview(previewView)
    previewView.layer.addSublayer(previewLayer)
    view.addSubview(myView)
    view.addSubview(captureButton)
    captureButton.bringSubviewToFront(self.view)

最佳答案

以下工作有效

let previewLayer: AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: self.avCaptureSession)

previewLayer.frame = self.view.layer.frame

previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill

self.view.layer.addSublayer(previewLayer)        

let cameraOverlay = CameraOverlay(nibName:"CameraOverlay",bundle: nil)

let cameraOverlayView:CameraOverlayView = cameraOverlay.view as! CameraOverlayView

let previewView = UIView(frame: view.frame)

self.view.addSubview(previewView)

previewView.layer.addSublayer(previewLayer)

self.view.addSubview(cameraOverlayView)

self.avCaptureSession?.startRunning()

关于ios - 覆盖 AVCaptureVideoPreviewLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45520910/

相关文章:

ios - Firebase - 使用未声明的标识符 'FIRAnalyticsConfiguration'

iphone - iOS 在另一个 uiview 中加载 uiview

ios - 接收方没有标识符异常的 segue

ios - Quickblox:我在加入/离开聊天室时收到 EXC_BAD_ACCESS(code=1, address"mem-address")

ios - iOS 中应用程序终止时接听电话

ios - 每天在设定的时间用 swift 重复本地通知

ios - 从 Swift 中的画廊中挑选图像

ios - UIView 和 UIButton 的动画区别

ios - 无法让 CALayer 在 UIView 中显示

ios - TableView编辑模式删除按钮重叠