Camera Manager
这是一个简单的 Swift 类,用于提供您在应用程序中创建自定义相机视图所需的所有配置。它遵循方向变化并相应地更新 UI,支持前后摄像头选择、捏合缩放、轻触对焦、曝光滑块、不同的闪光模式、输入/输出和 QR 码检测。只需拖放即可使用。
我们还写了有关它的博客文章。您可以在这里阅读。
使用 CocoaPods 安装
安装 CameraManager 最简单的方法是使用 CocoaPods
Podfile
use_frameworks!
pod 'CameraManager', '~> 5.1'
使用 Swift Package Manager 安装
Swift 包管理器(Swift Package Manager)是一个用于管理 Swift 代码分布的工具。
请将 CameraManager
添加为依赖项到您的 Package.swift
文件中
import PackageDescription
let package = Package(
dependencies: [
.Package(url: "https://github.com/imaginary-cloud/CameraManager", from: "5.1.3")
]
)
使用 Carthage 进行安装
Carthage 是另一个用 Swift 编写的依赖项管理工具。
在您的 Cartfile 中添加以下行
github "imaginary-cloud/CameraManager" >= 5.1
然后运行 carthage update
来创建动态框架。
如何使用
要使用它,只需将预览层添加到您想使用的视图中,如果您无法访问、准备就绪或用户拒绝访问相机,它会返回相机的状态。请注意,为了保留 AVCaptureSession,您需要在某处保留 cameraManager 实例,例如作为一个实例常量。
let cameraManager = CameraManager()
cameraManager.addPreviewLayerToView(self.cameraView)
要拍摄照片,只需调用
cameraManager.capturePictureWithCompletion({ result in
switch result {
case .failure:
// error handling
case .success(let content):
self.myImage = content.asImage;
}
})
要记录视频,请调用
cameraManager.startRecordingVideo()
cameraManager.stopVideoRecording({ (videoURL, recordError) -> Void in
guard let videoURL = videoURL else {
//Handle error of no recorded video URL
}
do {
try FileManager.default.copyItem(at: videoURL, to: self.myVideoURL)
}
catch {
//Handle error occured during copy
}
})
要手动放大
let zoomScale = CGFloat(2.0)
cameraManager.zoom(zoomScale)
属性
您可以将输入设备设置为前置或后置相机。 (默认:.后置)
cameraManager.cameraDevice = .front || .back
您可以指定前置相机图像是否应水平翻转。 (默认:false)
cameraManager.shouldFlipFrontCameraImage = true || false
您可以启用或禁用相机预览中的手势。 (默认:true)
cameraManager.shouldEnableTapToFocus = true || false
cameraManager.shouldEnablePinchToZoom = true || false
cameraManager.shouldEnableExposure = true || false
您可以设置输出格式为图片、视频或带有音频的视频。 (默认:.stillImage)
cameraManager.cameraOutputMode = .stillImage || .videoWithMic || .videoOnly
您可以基于 AVCaptureSession.Preset 值设置质量 (默认:.high)
cameraManager.cameraOutputQuality = .low || .medium || .high || *
*
检查所有可能的值 这里
您可以还可以检查您是否可以设置特定预置值
if .cameraManager.canSetPreset(preset: .hd1280x720) {
cameraManager.cameraOutputQuality = .hd1280x720
} else {
cameraManager.cameraOutputQuality = .high
}
您可以指定对焦模式。 (默认:.continuousAutoFocus)
cameraManager.focusMode = .autoFocus || .continuousAutoFocus || .locked
您可以指定曝光模式。 (默认:.continuousAutoExposure)
cameraManager.exposureMode = .autoExpose || .continuousAutoExposure || .locked || .custom
您可以更改闪光模式(它也会设置相应的闪光模式)。 (默认:.off)
cameraManager.flashMode = .off || .on || .auto
您可以在视频录制会话期间指定使用的稳定模式。 (默认:.auto)
cameraManager.videoStabilisationMode = .auto || .cinematic
您可以获取当前活动的视频稳定模式。如果视频稳定不支持或不活动,它将返回 .off
。
cameraManager.activeVideoStabilisationMode
您可以在将图片保存到相册时启用位置服务以存储 GPS 位置。 (默认:false)
cameraManager.shouldUseLocationServices = true || false
如果使用位置,必须在您的应用的 Info.plist
中添加 NSLocationWhenInUseUsageDescription
键。 更多信息
在调用 capturePictureWithCompletion
时获取 GPS 位置应使用 CaptureResult
的 data
作为(请参阅 示例应用)。
您可以指定是否将文件保存到手机库中。(默认:true)
cameraManager.writeFilesToPhoneLibrary = true || false
您可以指定图片和视频录制时所在的相册名称。
cameraManager.imageAlbumName = "Image Album Name"
cameraManager.videoAlbumName = "Video Album Name"
您可以指定是否要禁用动画。(默认:true)
cameraManager.animateShutter = true || false
cameraManager.animateCameraDeviceChange = true || false
当您第一次尝试使用相机时,您可以指定是否自动询问用户相机权限,或手动询问。(默认:true)
cameraManager.showAccessPermissionPopupAutomatically = true || false
检测设备是否支持闪光通话
cameraManager.hasFlash
要将闪光灯模式更改为下一个可用模式,您可以使用此便捷函数,该函数还会返回当前值,供您更新UI。
cameraManager.changeFlashMode()
您甚至可以设置自定义块来处理错误消息:它可以被设置为在根视图控制器中显示,例如。
cameraManager.showErrorBlock = { (erTitle: String, erMessage: String) -> Void in
var alertController = UIAlertController(title: erTitle, message: erMessage, preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: { (alertAction) -> Void in
}))
let topController = UIApplication.shared.keyWindow?.rootViewController
if (topController != nil) {
topController?.present(alertController, animated: true, completion: { () -> Void in
//
})
}
}
您可以设置是否要检测二维码
cameraManager.startQRCodeDetection { (result) in
switch result {
case .success(let value):
print(value)
case .failure(let error):
print(error.localizedDescription)
}
}
并且不要忘记在完成检测后调用cameraManager.stopQRCodeDetection()
。
支持
支持iOS 9及以上版本。要构建使用Swift 5.2编写的最新代码,需要Xcode 11.4。
现在它与最新的Swift语法兼容,因此如果您使用的是4.2之前的任何版本的Swift,请确保使用先前标记的发布版本
许可
版权所有 © 2010-2020 Imaginary Cloud。本库受MIT许可证的许可。
关于Imaginary Cloud
在Imaginary Cloud,我们创建世界上最优秀的Web和移动应用。我们的前端开发者和UI/UX设计师可以创建或扩展您的数字产品。请查看我们的网站并联系我们!我们将从那里开始。