CameraManager 5.1.3

CameraManager 5.1.3

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2020 年 4 月
SPM支持 SPM

nelanelanelaMiguel CampiãomiguelcampiaoRicardo TorrãoTiago Franco 维护。



Camera Manager

CocoaPods Carthage compatible

这是一个简单的 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 位置应使用 CaptureResultdata 作为(请参阅 示例应用)。

您可以指定是否将文件保存到手机库中。(默认: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,请确保使用先前标记的发布版本

  • 关于Swift 4.0请参看以下链接:v4.4.0

  • 关于Swift 3.0请参看以下链接:v3.2.0

许可

版权所有 © 2010-2020 Imaginary Cloud。本库受MIT许可证的许可。

关于Imaginary Cloud

Imaginary Cloud

在Imaginary Cloud,我们创建世界上最优秀的Web和移动应用。我们的前端开发者和UI/UX设计师可以创建或扩展您的数字产品。请查看我们的网站联系我们!我们将从那里开始。