我正在使用这段代码在我的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中设置框架,但我无法使它的大小适当。
发布于 2016-06-07 20:34:06
您不必重写layoutSubivews或viewDidLayoutSUbviews方法。
previewView被约束为superview (如果您使用的是自动收费的话)previewLayer的边界与previewView bounds相同。不要在将框架值赋予边界或将值绑定到帧时感到困惑。AVLayerVideoGravityResizeAspectFill。4.可以将previewLayer定位到previewView中心。使用previewLayer的位置属性并将其设置为previewView的中心。
setupSession() / viewDidAppear/viewWillAppear中调用发布于 2016-06-07 20:33:48
检查是否为所有受支持的设备分配了启动映像。如果没有,那么无论您做什么,iOS都将默认为该大小。
https://stackoverflow.com/questions/37688623
复制相似问题