相机预览图层使按钮不可见

时间:2017-07-29 20:52:58

标签: ios swift xcode debugging storyboard

我正在尝试在相机预览上添加一个按钮,但是当我运行程序时它没有显示(我有约束)。我查看了代码并尝试调试,但我是swift和Xcode的新手,我是一般的调试新手。我看到当我注释掉相机预览图层时按钮出现了。谢谢!

import UIKit
import AVFoundation
import QuartzCore

class View1: UIViewController , AVCaptureVideoDataOutputSampleBufferDelegate{

let captureSession = AVCaptureSession()
var previewLayer:CALayer!
var captureDevice:AVCaptureDevice!

@IBOutlet weak var cameraView:UIView!

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    prepareCamera()
}

func prepareCamera() {
    captureSession.sessionPreset = AVCaptureSessionPreset1920x1080

    if let availableDevices = AVCaptureDeviceDiscoverySession(deviceTypes: [.builtInWideAngleCamera],                                                                                                          mediaType: AVMediaTypeVideo,                                                                                                             position: .back).devices {

        captureDevice = availableDevices.first
        beginSession()
    }
}

func beginSession() {
    do {
        let captureDeviceInput = try AVCaptureDeviceInput(device: captureDevice)
        captureSession.addInput(captureDeviceInput)
    } catch {
        print(error.localizedDescription)
        //Figure out what to do here 
 }
    if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) {



        self.previewLayer = previewLayer
        self.view.layer.addSublayer(self.previewLayer)
        self.previewLayer.frame = self.view.layer.frame
        captureSession.startRunning()

        let dataOutput = AVCaptureVideoDataOutput()
        dataOutput.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString): NSNumber(value: kCVPixelFormatType_32BGRA)]

        dataOutput.alwaysDiscardsLateVideoFrames = true

        if captureSession.canAddOutput(dataOutput){

            captureSession.addOutput(dataOutput)
            captureSession.commitConfiguration()
        }

        let queue = DispatchQueue(label: "com.PhotoAllergy.captureQueue")
        dataOutput.setSampleBufferDelegate(self, queue: queue)
    }  
}

}

2 个答案:

答案 0 :(得分:1)

也许您可以尝试将按钮的{{1}}设置为1或更高。 {{1}}

Apple Documentation on ZPosition

答案 1 :(得分:0)

You just have to add button as subview to view that is working as a preview for your avcamera.

class RecordVC {
    @IBOutlet weak var vwRecordVideo : UIView!
    @IBOutlet weak var btnGallary : UIButton!
override func viewDidLoad() {
    super.viewDidLoad()
        vwRecordVideo.addSubview(cameraButton)
        vwRecordVideo.addSubview(btnGallary)
     }
}