我正在使用以下代码在我的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
,但无法正确调整其大小。
您不必重写layoutSubivews或viewDidLayoutSUbviews方法。
previewView
约束为superview
(如果使用自动版式)previewLayer
相同previewView
bounds
。将框架值赋予边界或将边界值赋予框架时,请不要感到困惑。AVLayerVideoGravityResizeAspectFill
。4.您可以将放置previewLayer
并使其居中previewView
。使用的position属性previewLayer
并将其设置为的中心previewView
。
setupSession()
无论是在viewDidAppear
/viewWillAppear
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句