AVCaptureVideoPreviewLayer看起来像iPhone 4大小

埃里克

我正在使用以下代码在我的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
}

但是,相机显示如下:

在此处输入图片说明

它似乎等同于iPhone 4的显示尺寸。

我该如何解决?我尝试将框架设置为viewDidLayoutSubviews,但无法正确调整其大小。

Teja Nandamuri

您不必重写layoutSubivews或viewDidLayoutSUbviews方法。

  1. 确保将previewView约束为superview(如果使用自动版式)
  2. 确保的界限与previewLayer相同previewView bounds将框架值赋予边界或将边界值赋予框架时,请不要感到困惑。
  3. 将预览层的视频重力设置为AVLayerVideoGravityResizeAspectFill

4.您可以将放置previewLayer并使其居中previewView使用的position属性previewLayer并将其设置为的中心previewView

  1. 调用setupSession()无论是在viewDidAppear/viewWillAppear

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

绘制看起来像球体的球体

来自分类Dev

应用在iPhone 5模拟器和设备上以iPhone 4大小运行

来自分类Dev

调整大小后,二手引导框架网站看起来不错,但在iPhone上却不行

来自分类Dev

如何使UITableView看起来像这样?

来自分类Dev

如何使按钮看起来像标签?

来自分类Dev

UITableView看起来比设置的要大

来自分类Dev

当我在iPhone 5屏幕上运行程序时,Xcode看起来像iPhone 4

来自分类Dev

使普通布局看起来像PreferenceScreen

来自分类Dev

哎呦,看起来像出事了

来自分类Dev

我可以使Linux计算机上的USB端口看起来像大容量存储设备吗?

来自分类Dev

我可以使Linux计算机上的USB端口看起来像大容量存储设备吗?

来自分类Dev

看起来像JTextArea的JTextPane

来自分类Dev

使Ubuntu看起来像Parrot os

来自分类Dev

使按钮看起来像文本

来自分类Dev

应用程序在iPhone 5模拟器和设备上以iPhone 4大小运行

来自分类Dev

如何使UITableView看起来像这样?

来自分类Dev

小模态看起来不小

来自分类Dev

防止链接看起来像按钮

来自分类Dev

看起来像ImageButtons的RadioButtons

来自分类Dev

Jtextpane中的字体大小看起来比其他应用程序小

来自分类Dev

程序输出的图案看起来像给定大小的英国国旗

来自分类Dev

看起来像大图片的视频拇指

来自分类Dev

应用看起来像DialogFragment

来自分类Dev

某些生成的图标看起来比普通图标大

来自分类Dev

HTML-使内联块元素变小,但看起来大

来自分类Dev

在iPhone SE上还原iPhone 4备份后的Web App具有iPhone 4大小

来自分类Dev

使Outlook看起来像雷鸟吗?

来自分类Dev

这看起来像加密吗?

来自分类Dev

Antlr4 c++目标看起来像java

Related 相关文章

热门标签

归档