旋转相机代码
@objc func showLivePreview(view: UIView) {
var myPreviewLayer = AVCaptureVideoPreviewLayer()
let captureSession = AVCaptureSession()
var backCamera: AVCaptureDevice?
var frontCamera: AVCaptureDevice?
var currentCamera: AVCaptureDevice?
var videoOutput = AVCaptureVideoDataOutput()
// Step 1: Set up the preview layer
myPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
myPreviewLayer.videoGravity = .resizeAspectFill
myPreviewLayer.connection?.videoOrientation = .portrait
captureSession.sessionPreset = AVCaptureSession.Preset.photo
let session = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: .video, position: .front)
let devices = session.devices
currentCamera = devices.first
do{
let captureDeviceInput = try AVCaptureDeviceInput(device: currentCamera!)
print(captureDeviceInput)
captureSession.addInput(captureDeviceInput)
let videoOutput = AVCaptureMovieFileOutput()
captureSession.addOutput(videoOutput)
}catch{
return
}
view.layer.addSublayer(myPreviewLayer)
// Make layer rounded
view.layer.cornerRadius = view.bounds.width / 2
view.layer.masksToBounds = true
print("finished with layer. start camera")
myPreviewLayer.session = captureSession
let photoOutput = AVCapturePhotoOutput()
if captureSession.canAddOutput(photoOutput ) {
captureSession.addOutput(photoOutput )
}
// Position layer in UI
myPreviewLayer.frame = view.frame//was bounds
// Start the session in background thread as per Thread Performance Checker
DispatchQueue.global().async {
captureSession.startRunning()
}
相机是从使用情节板的Objective-C编写的VC中调用的。我尚未尝试定位相机,因此视图自我。视图只是故事板的主视图。
对象c
- (void)viewDidLoad {
[super viewDidLoad];
[[Utilities shared] showLivePreviewWithView:self.view];
}