Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVCaptureVideoPreviewLayer看起来是iPhone4大小_Ios_Swift_Autolayout_Avfoundation_Avcapturesession - Fatal编程技术网

Ios AVCaptureVideoPreviewLayer看起来是iPhone4大小

Ios AVCaptureVideoPreviewLayer看起来是iPhone4大小,ios,swift,autolayout,avfoundation,avcapturesession,Ios,Swift,Autolayout,Avfoundation,Avcapturesession,我正在使用此代码在iOS 9 Swift应用程序中显示摄像头: 特性: @IBOutlet weak var previewView: UIView! var session: AVCaptureSession! var input: AVCaptureDeviceInput! var output: AVCaptureStillImageOutput! var previewLayer: AVCaptureVideoPreviewLayer? 委托方法: override func vie

我正在使用此代码在iOS 9 Swift应用程序中显示摄像头:

特性:

@IBOutlet weak var previewView: UIView!

var session: AVCaptureSession!
var input: AVCaptureDeviceInput!
var output: AVCaptureStillImageOutput!
var previewLayer: AVCaptureVideoPreviewLayer?
委托方法:

override func viewDidLoad() {
    super.viewDidLoad()
}

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

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    // Experimental / debugging
    view.layoutSubviews()
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    // Experimental / debugging
    previewLayer!.frame = previewView.bounds
}
摄像方法:

func setupSession() {
    session = AVCaptureSession()
    session.sessionPreset = AVCaptureSessionPresetPhoto

    let camera = frontCamera()

    do { input = try AVCaptureDeviceInput(device: camera) } catch { return }

    output = AVCaptureStillImageOutput()
    output.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]

    guard session.canAddInput(input) && session.canAddOutput(output) else { return }

    session.addInput(input)
    session.addOutput(output)

    previewLayer = AVCaptureVideoPreviewLayer(session: session)
    previewLayer!.videoGravity = AVLayerVideoGravityResizeAspect
    previewLayer!.frame = previewView.bounds
    previewLayer!.connection?.videoOrientation = .Portrait

    previewView.layer.addSublayer(previewLayer!)

    session.startRunning()
}

func frontCamera() -> AVCaptureDevice! {
    let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
    for device in devices {
        if (device.position == AVCaptureDevicePosition.Front) {
            return device as! AVCaptureDevice
        }
    }
    return nil
}
但是相机显示如下:

而且它看起来相当于iPhone4的显示尺寸


我怎样才能解决这个问题?我已尝试在
viewdilayoutsubviews
中设置框架,但无法正确调整其大小。

检查是否为所有支持的设备分配了启动映像。如果没有,则无论您做什么,iOS都将默认为该大小。

检查您是否为所有支持的设备分配了启动映像。如果没有,则无论您做什么,iOS都将默认为该大小。

您不必重写layoutSubivews或viewDidLayoutSUbviews方法

  • 确保
    previewView
    被约束为
    superview
    (如果您使用的是自动布局)
  • 确保
    预览层
    的边界与
    预览视图
    边界
    相同。在为边界指定帧值或为帧指定绑定值时,请不要混淆
  • 将预览层的视频重力设置为
    AVLayerVideoGravityResizeAspectFill
  • 4.您可以定位
    previewLayer
    并使其位于
    previewView
    的中心。使用
    previewLayer
    的位置属性,并将其设置为
    previewView
    的中心

  • 调用
    setupSession()
    中的任何一个

  • 您不必重写layoutSubivews或viewDidLayoutSUbviews方法

  • 确保
    previewView
    被约束为
    superview
    (如果您使用的是自动布局)
  • 确保
    预览层
    的边界与
    预览视图
    边界
    相同。在为边界指定帧值或为帧指定绑定值时,请不要混淆
  • 将预览层的视频重力设置为
    AVLayerVideoGravityResizeAspectFill
  • 4.您可以定位
    previewLayer
    并使其位于
    previewView
    的中心。使用
    previewLayer
    的位置属性,并将其设置为
    previewView
    的中心

  • 调用
    setupSession()
    中的任何一个

  • 数字3解决了这个问题,显然最后四个字符“Fill”起了作用。谢谢数字3解决了这个问题,显然最后四个字符“Fill”起了作用。谢谢