这是公司上上上一个项目的自定义相机界面,原来是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()
}
github源码地址:https://github.com/pheromone/swift_custom_camera