Swift 3-AVCapture自定义摄像头视图
我一直在看这段视频,制作一个定制的摄像头视图。 然而,由于iOS 10和swift 3的变化,许多事情不再相关了 下面是我在将不推荐的函数更改为新函数后得到的代码。但是没有错误,但是在UIView上也没有看到预览Swift 3-AVCapture自定义摄像头视图,swift,avfoundation,ios10,avcapturesession,avcapture,Swift,Avfoundation,Ios10,Avcapturesession,Avcapture,我一直在看这段视频,制作一个定制的摄像头视图。 然而,由于iOS 10和swift 3的变化,许多事情不再相关了 下面是我在将不推荐的函数更改为新函数后得到的代码。但是没有错误,但是在UIView上也没有看到预览 import UIKit import AVFoundation class ViewController: UIViewController, AVCapturePhotoCaptureDelegate, UIImagePickerControllerDelegate, UINa
import UIKit
import AVFoundation
class ViewController: UIViewController, AVCapturePhotoCaptureDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var cameraView: UIView!
var captureSession = AVCaptureSession();
var sessionOutput = AVCapturePhotoOutput();
var sessionOutputSetting = AVCapturePhotoSettings(format: [AVVideoCodecKey:AVVideoCodecJPEG]);
var previewLayer = AVCaptureVideoPreviewLayer();
override func viewWillAppear(_ animated: Bool) {
let deviceDiscoverySession = AVCaptureDeviceDiscoverySession(deviceTypes: [AVCaptureDeviceType.builtInDuoCamera, AVCaptureDeviceType.builtInTelephotoCamera,AVCaptureDeviceType.builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: AVCaptureDevicePosition.unspecified)
for device in (deviceDiscoverySession?.devices)! {
if(device.position == AVCaptureDevicePosition.front){
do{
let input = try AVCaptureDeviceInput(device: device)
if(captureSession.canAddInput(input)){
captureSession.addInput(input);
if(captureSession.canAddOutput(sessionOutput)){
captureSession.addOutput(sessionOutput);
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession);
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
previewLayer.connection.videoOrientation = AVCaptureVideoOrientation.portrait;
cameraView.layer.addSublayer(previewLayer);
}
}
}
catch{
print("exception!");
}
}
}
}
您忘记启动会话:
captureSession.startRunning()
并为您的预览层设置帧
:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
previewLayer.frame = cameraView.bounds
}
p、 一旦你添加了会话输入和输出,你就应该打破这个循环。不管怎样,它应该只运行一次?可能吧,但这让我感到紧张。例如,iPhone 7+上不是有两个背向摄像头吗?这不太可能,但你可能会在未来的硬件上得到一个令人讨厌的惊喜…是的,肯定会打破循环。如果可能,请始终避免将来出现问题。@hyrthmicfistman在
previewLayer.frame=cameraView.bounds
行上崩溃。sessionOutputSetting
未使用…为什么?