直接上代码
//
// TGCameraVC.swift
// TGPhotoPicker
//
// Created by targetcloud on 2017/7/25.
// Copyright © 2017年 targetcloud. All rights reserved.
//
import UIKit
import AVFoundation
import Photos
@available(iOS 10.0, *)
class TGCameraVC: UIViewController {
var callbackPicutureData: ((Data?) -> ())?
private var device: AVCaptureDevice?
private var input: AVCaptureDeviceInput?
private var imageOutput: AVCapturePhotoOutput?
private var session: AVCaptureSession?
private var previewLayer: AVCaptureVideoPreviewLayer?
fileprivate var showImageContainerView: UIView?
fileprivate var showImageView: UIImageView?
fileprivate var picData: Data?
private var flashMode: AVCaptureFlashMode = .auto
private weak var flashButton: UIButton?
override func viewDidLoad() {
super.viewDidLoad()
setupCamera()
setupUI()
if #available(iOS 9.0, *) {
let isVCBased = Bundle.main.infoDictionary?["UIViewControllerBasedStatusBarAppearance"] as? Bool ?? false
if !isVCBased{
UIApplication.shared.setStatusBarHidden(false, with: .none)
}
}else {
UIApplication.shared.statusBarStyle = .lightContent
UIApplication.shared.setStatusBarHidden(false, with: .none)
}
}
override var prefersStatusBarHidden: Bool{
return false
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
private func setupCamera() {
AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo) { success in
if !success {
let alertVC = UIAlertController(title: TGPhotoPickerConfig.shared.cameraUsage, message: TGPhotoPickerConfig.shared.cameraUsageTip, preferredStyle: .actionSheet)
alertVC.addAction(UIAlertAction(title: TGPhotoPickerConfig.shared.confirmTitle, style: .default, handler: nil))
self.present(alertVC, animated: true, completion: nil)
}
}
device = cameraWithPosistion(.back)
input = try? AVCaptureDeviceInput(device: device)
guard input != nil else {
return
}
imageOutput = AVCapturePhotoOutput()
session = AVCaptureSession()
session?.beginConfiguration()
session?.sessionPreset = TGPhotoPickerConfig.shared.sessionPreset
if session!.canAddInput(input) {
session!.addInput(input)
}
if session!.canAddOutput(imageOutput) {
session!.addOutput(imageOutput)
}
previewLayer = AVCaptureVideoPreviewLayer(session: session)
previewLayer?.frame = view.bounds
previewLayer?.videoGravity = TGPhotoPickerConfig.shared.videoGravity
view.layer.addSublayer(previewLayer!)
session?.commitConfiguration()
session?.startRunning()
}