2017-07-14 10 views
0

チュートリアルの作業中、全画面プレビューを作成しようとしています。現在のところ、私のカメラは非常に正方形のように見えますが、これはアスペクトフィッティングの問題かもしれないとかなり確信しています。カメラは左右の境界線に当たるようです。プレビューをナビゲーションバーの下部と画面の下部、および側面に固定するにはどうすればよいですか?IOSカメラのプレビュー画層を表示するには

import UIKit 
import AVFoundation 

class HomeViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate { 

    let captureSession = AVCaptureSession() 
    var previewLayer:CALayer! 

    var captureDevice:AVCaptureDevice! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     prepareCamera() 
    } 

    func prepareCamera(){ 
     captureSession.sessionPreset = AVCaptureSessionPresetPhoto 

     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) 
     } 

     if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) { 
      self.previewLayer = previewLayer 
      self.view.layer.addSublayer(self.previewLayer) 
      self.previewLayer.frame = self.view.layer.frame 
//ADD CONSTRAINTS HERE 

      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.willkie.captureQueue) 
//   dataOutput.setSampleBufferDelegate(self, queue: queue) 
     } 
    } 

    func captureOutput(_ captureOutput: AVCaptureOutput!, didDrop sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) { 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

why???

+0

を支援します.view.bounds'? – nathan

+0

@nathan同じことをします。 – user1093111

+0

私は通常のカメラアプリを見て、そのプレビューレイヤーは同じサイズです。 – user1093111

答えて

1

私はおそらく、あなたのこの特定の行を変更して動作するはずだと思う -

self.previewLayer.frame = self.view.layer.frame 

self.previewLayer.frame = self.view.layer.bounds 

にも、あなたが調整した後にのみ、あなたのサブレイヤを追加する必要があります上記のコードのフレーム。今すぐあなたは以前に追加しました。

self.view.layer.addSublayer(self.previewLayer) 

そして、あなたはまた、それはまだ、仕事あなたのViewControllerにカスタムビューを追加し、カメラを表示したいサイズに設定されていない場合は、重力

previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 

を追加する必要があります

self.previewLayer.frame = self.customViewOutlet.layer.bounds 
0

私はこれはこれについて行くための最善の方法であることを確認していないが、何私の仕事は、画面サイズのフレームに設定するだった - プレビューとは、あなたがこれを使用することができます。だから、その場合には、次のようになります。

self.previewLayer.frame = UIScreen.main.bounds 

希望は、これはあなたが `self.previewLayer.frame = self.view.layer.frame`` self.previewLayer.frame =自己と置き換えるとどう

関連する問題