我正在尝试在我的视频预览图层上创建叠加层。我尝试了以下方法。但我的叠加 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/