这是公司上上上一个项目的自定义相机界面,原来是swift2.0写的,今天改为swift3.0,记录一下.
效果图如下:
使用AVFoundation制作.
属性:
1 var device:AVCaptureDevice! //获取设备:如摄像头 2 var input:AVCaptureDeviceInput! //输入流 3 var photoOutput:AVCaptureStillImageOutput! //输出流 4 var output:AVCaptureMetadataOutput! //当启动摄像头开始捕获输入 5 var session:AVCaptureSession!//会话,协调着intput到output的数据传输,input和output的桥梁 6 var previewLayer:AVCaptureVideoPreviewLayer! //图像预览层,实时显示捕获的图像 7 8 var photoButton: UIButton? //拍照按钮 9 var imageView: UIImageView? //拍照后的成像 10 var image: UIImage? //拍照后的成像 11 var isJurisdiction: Bool? //是否获取了拍照标示 12 var flashBtn:UIButton? //闪光灯按钮
在viewDidLoad里面判断下权限,没给权限给个提示
isJurisdiction = canUserCamear() if isJurisdiction! { customCamera() //自定义相机 customUI() //自定义相机按钮 } else { return }
// MARK: - 检查相机权限 func canUserCamear() -> Bool { let authStatus: AVAuthorizationStatus = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo) if authStatus == .denied { let alertView = UIAlertView(title: "请打开相机权限", message: "设置-隐私-相机", delegate: self, cancelButtonTitle: "确定", otherButtonTitles: "取消") alertView.tag = 100 alertView.show() return false } else { return true } return true }
自定义相机:
View Code
自定义相机界面按钮:拍照,取消,闪光灯,前后拍照切换按钮
View Code
拍照按钮点击事件:
View Code
闪光灯切换事件:
View Code
取消按钮点击事件:
//MARK:取消按钮 func cancelActin(){ self.imageView?.removeFromSuperview() self.session.startRunning() }