这是一个简单的 Swift 类,提供了在您的应用程序中创建自定义相机视图所需的所有配置。它会根据方向变化进行调整并相应地更新 UI,支持前后摄像头选择、捏合缩放、点击对焦、曝光滑块、不同的闪光灯模式、输入和输出以及二维码检测。只需拖放即可使用。
我们还写了一篇关于它的博文。您可以在这里阅读。
安装 CameraManager 最简单的方法是使用 CocoaPods
use_frameworks!
pod 'CameraManager', '~> 5.1'
Swift Package Manager 是一个用于管理 Swift 代码分发的工具。
在您的 Package.swift
文件中添加 CameraManager
作为依赖项
import PackageDescription
let package = Package(
dependencies: [
.Package(url: "https://github.com/imaginary-cloud/CameraManager", from: "5.1.3")
]
)
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)
您可以将输入设备设置为前置或后置摄像头。 (默认: .Back)
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
如果您使用位置信息,则必须将 NSLocationWhenInUseUsageDescription
键添加到应用程序的 Info.plist
中。更多信息
为了在调用 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()
您甚至可以设置您的自定义块来处理错误消息:例如,它可以自定义为在 Window 根视图控制器上呈现。
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 及以上版本。需要 Xcode 11.4 才能构建用 Swift 5.2 编写的最新代码。
现在它与最新的 Swift 语法兼容,因此如果您使用的任何 Swift 版本低于 5,请确保使用以前标记的发布版本之一
版权所有 © 2010-2020 Imaginary Cloud。 此库在 MIT 许可证下获得许可。
在 Imaginary Cloud,我们构建世界一流的 Web 和移动应用程序。 我们的前端开发人员和 UI/UX 设计师已准备好创建或扩展您的数字产品。 查看我们的网站并联系我们! 我们将从那里开始。