2017-02-20 7 views
2

私のアプリで自分の携帯電話でカメラを使用しようとしていますが、成功しましたが、残念ながらプレビューを使用するとレイヤーが画面全体を満たしませんHere is an image to show you what it looks likeAVCaptureSessionとプレビューレイヤーで画面全体が塗りつぶされない

は、ここに私のコードです:

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.Osmo.captureQueue") 
     dataOutput.setSampleBufferDelegate(self, queue: queue) 
    } 
+0

は –

+0

申し訳ありませんが、うまくいきませんでしたに代わりに 'self.view.layer.bounds'を設定してください。私にできることはほかにありますか? –

+0

このコードをどこで呼びますか? –

答えて

0

次のことを試してください:

if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) { 
     self.previewLayer = previewLayer 
     self.previewLayer.frame = self.view.bounds 
     self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 
     self.view.layer.insertSublayer(self.previewLayer, at: 0) 
     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.Osmo.captureQueue") 
     dataOutput.setSampleBufferDelegate(self, queue: queue) 
    } 
0

コードの一部を以下試してみてください。

if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) { 
        previewLayer.bounds = view.bounds 
        previewLayer.position = CGPoint(x: view.bounds.midX, y: view.bounds.midY) //CGPointMake(view.bounds.midX, view.bounds.midY) 
        previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 
        let cameraPreview = UIView(frame: CGRect(x: 0.0, y: 0.0, width: view.bounds.width, height: view.bounds.height)); 
        cameraPreview.tag = 44221007 
        cameraPreview.layer.addSublayer(previewLayer) 
        //cameraPreview.addGestureRecognizer(UITapGestureRecognizer(target: self, action:Selector(("saveToCamera:")))) 
        view.addSubview(cameraPreview) 
        self.view.sendSubview(toBack: cameraPreview); 

       } 

アップルドック: AVFoundation class image

1

あなたは、自動レイアウトの制約を持つビューからプレビュー層のフレームを設定しようとしているので、これは起こるかもしれません。あなたのビューコントローラにviewDidLayoutSubviewsメソッドのオーバーライドを追加しよう:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    self.previewLayer.frame = self.view.layer.bounds 
} 
関連する問題