首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVCaptureVideoPreviewLayer看起来是iPhone 4大小

AVCaptureVideoPreviewLayer看起来是iPhone 4大小
EN

Stack Overflow用户
提问于 2016-06-07 20:22:03
回答 2查看 160关注 0票数 1

我正在使用这段代码在我的iOS 9,Swift应用程序中显示一个摄像头:

物业:

代码语言:javascript
复制
@IBOutlet weak var previewView: UIView!

var session: AVCaptureSession!
var input: AVCaptureDeviceInput!
var output: AVCaptureStillImageOutput!
var previewLayer: AVCaptureVideoPreviewLayer?

委托方法:

代码语言:javascript
复制
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
}

摄影方法:

代码语言:javascript
复制
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中设置框架,但我无法使它的大小适当。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-07 20:34:06

您不必重写layoutSubivews或viewDidLayoutSUbviews方法。

  1. 确保previewView被约束为superview (如果您使用的是自动收费的话)
  2. 确保previewLayer的边界与previewView bounds相同。不要在将框架值赋予边界或将值绑定到帧时感到困惑。
  3. 将预览层的视频重力设置为AVLayerVideoGravityResizeAspectFill

4.可以将previewLayer定位到previewView中心。使用previewLayer的位置属性并将其设置为previewView的中心。

  1. setupSession() / viewDidAppear/viewWillAppear中调用
票数 0
EN

Stack Overflow用户

发布于 2016-06-07 20:33:48

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37688623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档