2017-05-09 5 views
0

UIImagePickerControllerがビデオモードのとき、AVFoundationがUIImagePickerControllerと同じズームレベルで表示されるのはなぜですか?写真モードでUIImagePickerControllerと同じズームレベルでAVFoundation表示を行うにはどうしたらいいですか?UIImagePickerControllerがビデオモードのとき、AVFoundationがUIImagePickerControllerと同じズームレベルで表示されるのはなぜですか?

AVFoundation

UIImagePickerController

import UIKit 
import AVFoundation 
class ViewController: UIViewController { 
    var captureSession = AVCaptureSession() 
    var sessionOutput = AVCapturePhotoOutput() 
    var sessionOutputSetting = AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecJPEG]) 
    var previewLayer = AVCaptureVideoPreviewLayer() 
    var cameraView: UIView? 
    override func viewDidLoad() { 
     cameraView = UIView(frame: view.frame) 
     view.addSubview(cameraView!) 
    } 
    override func viewWillAppear(_ animated: Bool) { 
     let deviceDiscoverySession = AVCaptureDeviceDiscoverySession(deviceTypes: [.builtInDualCamera, .builtInTelephotoCamera, .builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: .unspecified) 
     for device in (deviceDiscoverySession?.devices)! { 
      if device.position == .back { 
       do { 
        let input = try AVCaptureDeviceInput(device: device) 
        if captureSession.canAddInput(input) { 
         captureSession.addInput(input) 

         if captureSession.canAddOutput(sessionOutput) { 
          captureSession.addOutput(sessionOutput) 
          previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
          previewLayer.frame = (cameraView?.bounds)! 
          previewLayer.videoGravity = AVLayerVideoGravityResizeAspect // AVLayerVideoGravityResizeAspectFill 
          previewLayer.connection.videoOrientation = .portrait 
          cameraView?.layer.addSublayer(previewLayer) 
         } 
        } 
       } catch { 
        print("exception!") 
       } 
      } 
     } 
    } 
    override func viewDidAppear(_ animated: Bool) { 
     captureSession.startRunning() 
    } 
    override var shouldAutorotate: Bool { 
     return false 
    } 
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     return .portrait 
    } 
} 

答えて

0

二つのビューのアスペクト比が異なっています。トップビューはビデオで画面いっぱいになり、ビデオの一部はクリップされます。一方、2番目のビデオはしません。一般に、ビデオの標準出力は4:3のアスペクト比です。 AVCaptureDeviceFormatまたはAVCaptureDeviceを列挙して検証できます。同じアスペクト比を持ち、同じズームレベルを取得するようにカメラビューのサイズを設定します。

関連する問題