SwiftyCam 4.0.0

SwiftyCam 4.0.0

测试已测试
语言语言 SwiftSwift
许可证 BSD-2-Clause
发布最后发布2019年4月
SPM支持 SPM

Andrew WalzJon Andersen 维护。



SwiftyCam 4.0.0

  • 作者:
  • Andrew Walz

Platform: iOS 8+ Language: Swift 4.2 CocoaPods compatible License: BSD

概述

SwiftyCam 是一个简单的类似于 Snapchat 的 iOS 相机框架,方便进行图片和视频捕捉。SwiftyCam 允许用户以很少的配置就能在同一会话中捕捉照片和视频。

在 AVFoundation 中配置一个 Camera View Controller 可能很麻烦并耗时。SwiftyCam 是一个一次性 View Controller,它可以完全控制 AVSession。

关于 Swift 4 支持,请查看 Swift4 分支

特性

SwiftyCam
😎 类似 Snapchat 的媒体捕捉
👍 支持 iOS8+
📷 图片捕捉
🎥 视频捕捉
📈 手动设置图像质量
🎉 前后摄像头支持
🔦 前后灯光
☀️ 视网膜闪光灯支持
🔎 支持手动变焦
🔒 支持手动对焦
🌜 低光设置
🔈 背景音频支持

需求

  • iOS 8.0+
  • Swift 4.2+

许可

SwiftyCam遵循BSD许可。有关更多信息,请参阅LICENSE文件。

安装

CocoaPods

SwiftyCam可以通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中

pod "SwiftyCam"

Carthage

将其添加到Cartfile

github "Awalz/SwiftyCam" ~> 2.2.1
$ carthage update SwiftyCam

手动安装

只需将源文件夹的内容复制到您的项目中。

使用方法

使用SwiftyCam非常简单。

先决条件

自iOS 10起,苹果要求在应用程序的info.plist中添加NSCameraUsageDescriptionNSMicrophoneUsageDescription字符串。示例

<key>NSCameraUsageDescription</key>
	<string>To Take Photos and Video</string>
<key>NSMicrophoneUsageDescription</key>
	<string>To Record Audio With Video</string>

入门

如果您从CocoaPods安装SwiftyCam,请确保将模块导入到您的视图控制器中

import SwiftyCam

SwiftyCam是一个即插即用的便利框架。要创建相机实例,创建一个新的UIViewController子类。将UIViewController子类声明替换为SwiftyCamViewController

class MyCameraViewController : SwiftyCamViewController

这是设置用于照片和视频捕获的AVSession所需的一切。SwiftyCam将提示用户请求使用相机/麦克风的权限,并配置设备的输入和输出。

捕获

SwiftyCamButton

SwiftyCam提供了捕获媒体的一种非常方便的方法。SwiftyCamButton使用UITapGestureRecognizer捕获照片,使用UILongPressGestureRecognizer捕获视频

要使用SwiftyCamButton,只需创建一个并将其委托设置到您的SwiftyCamViewController中即可

let captureButton = SwiftyCamButton(frame: buttonFrame)
captureButton.delegate = self

手动

使用SwiftyCam捕获媒体非常简单。要捕获照片,只需调用takePhoto函数

takePhoto()

要开始录制视频,调用startVideoRecording函数

startVideoRecording()

要结束视频捕获,调用stopVideoRecording函数

stopVideoRecording()

委托

为了获取SwiftyCamButton或手动拍摄的照片和视频,您必须实现`SwiftyCamViewControllerDelegate`并设置`cameraDelegate`为您的视图控制器实例

class MyCameraViewController : SwiftyCamViewController, SwiftyCamViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        cameraDelegate = self
    }
    ...
}

委托方法

func swiftyCam(_ swiftyCam: SwiftyCamViewController, didTake photo: UIImage) {
     // Called when takePhoto() is called or if a SwiftyCamButton initiates a tap gesture
     // Returns a UIImage captured from the current session
}

func swiftyCam(_ swiftyCam: SwiftyCamViewController, didBeginRecordingVideo camera: SwiftyCamViewController.CameraSelection) {
     // Called when startVideoRecording() is called
     // Called if a SwiftyCamButton begins a long press gesture
}

func swiftyCam(_ swiftyCam: SwiftyCamViewController, didFinishRecordingVideo camera: SwiftyCamViewController.CameraSelection) {
     // Called when stopVideoRecording() is called
     // Called if a SwiftyCamButton ends a long press gesture
}

func swiftyCam(_ swiftyCam: SwiftyCamViewController, didFinishProcessVideoAt url: URL) {
     // Called when stopVideoRecording() is called and the video is finished processing
     // Returns a URL in the temporary directory where video is stored
}

func swiftyCam(_ swiftyCam: SwiftyCamViewController, didFocusAtPoint point: CGPoint) {
     // Called when a user initiates a tap gesture on the preview layer
     // Will only be called if tapToFocus = true
     // Returns a CGPoint of the tap location on the preview layer
}

func swiftyCam(_ swiftyCam: SwiftyCamViewController, didChangeZoomLevel zoom: CGFloat) {
	  // Called when a user initiates a pinch gesture on the preview layer
	  // Will only be called if pinchToZoomn = true
	  // Returns a CGFloat of the current zoom level
}

func swiftyCam(_ swiftyCam: SwiftyCamViewController, didSwitchCameras camera: SwiftyCamViewController.CameraSelection) {
     // Called when user switches between cameras
     // Returns current camera selection   
}

闪光灯

可以通过更改flashEnabled属性来启用闪光灯(手电筒)

flashEnabled = true

现在前后摄像头都支持闪光灯

后摄像头

对于照片,摄像机会闪光,类似于原生的iOS摄像头。对于视频,闪光灯将在录制视频期间启用

前摄像头

对于支持Retina Flash的型号,前摄像头将使用默认的闪光灯进行图像捕获。如果不支持Retina Flash,则使用类似于Snapchat的假Retina Flash

对于前摄像头视频,将在视频捕获期间在视频源上方放置一个白色,85%不透明的视图

切换相机

默认情况下,SwiftyCam将会启动后置相机。这可以通过修改viewDidLoad中的defaultCamera属性来改变

override func viewDidLoad() {
    super.viewDidLoad()
    defaultCamera = .front
    ...
}

SwiftyCam支持前后置相机的捕捉。要切换相机,请调用以下函数

switchCamera()

点对焦,捏合缩放和相机闪光灯在选择了前置相机时不支持。目前不支持在录制视频期间切换视频

SwiftyCam还允许通过双击手势在相机之间切换。要禁用此功能,请使用doubleTapCameraSwitch属性

doubleTapCameraSwitch = false

配置

SwiftyCam为捕捉功能提供了多种配置选项

视频质量

视频质量可以通过SwiftyCamViewController的videoQuality属性来设置。可用的选项对应于匹配的AVCaptureSessionPreset

视频质量 AVCaptureSessionPreset
.high AVCapturePresetHigh
.medium AVCapturePresetMedium
.low AVCapturePresetLow
.resolution352x288 AVCaptureSessionPreset352x288
.resolution640x480 AVCaptureSessionPreset640x480
.resolution1280x720 AVCaptureSessionPreset1280x720
.resolution1920x1080 AVCaptureSessionPreset1920x1080
.resolution3840x2160 AVCaptureSessionPreset3840x2160
.iframe960x540 AVCaptureSessionPresetiFrame960x540
.iframe1280x720 AVCaptureSessionPresetiFrame1280x720

默认值是.high。对于使用前置相机,.high始终都会被使用。

最大视频时长

如果您使用SwiftyCamButton,可以为视频时长设置最大值。当达到时间限制时,视频录制将自动停止,并将调用委托方法SwiftyCamDidFinishRecordingVideo。要设置此值,只需更改maximumVideoDuration

maximumVideoDuration = 10.0

设置 0.0 的值将允许通过 SwiftyCamButton 无限期地录制视频。默认值是 0.0

摄像头变焦

SwiftyCam支持通过捏合和滑动操作进行摄像头会话的数字变焦。这些操作类似于默认的iOS应用,并会变焦到最高支持的变焦级别。摄像头变焦仅支持后置摄像头。AVFoundation目前不支持前置摄像头变焦。要禁用此功能,请更改pinchToZoom属性

pinchToZoom = false

默认情况下,pinchToZoom处于启用状态。

SwiftyCam还支持通过垂直滑动操作变焦后置摄像头。要禁用此功能,请更改swipeToZoom属性

swipeToZoom = false

默认情况下,swipeToZoom处于启用状态。默认的滑动操作是在捕获会话中进行向下滑动以放大,向上滑动以缩小。这可以通过更改swipeToZoomInverted属性来反转

swipeToZoomInverted = true

您还可以限制后置摄像头可以变焦的量。为此,请使用maxZoomScale属性

maxZoomScale = 2.0

默认情况下,maxZoomScale设置为 无限。实际的最大变焦级别由设备的[1] videoMaxZoomFactor确定。

摄像头聚焦

默认情况下,SwiftyCam支持通过点击视频预览进行聚焦。SwiftyCam会将会话的聚焦和曝光级别设置为点击点。虽然点击设置曝光在两个摄像头上都受到支持,但点击聚焦仅限于后置摄像头。一旦SwiftyCam检测到从点击点开始的显著移动,自动聚焦和自动曝光将会恢复。要禁用此功能,请更改tapToFocus属性

tapToFocus = false

默认情况下,tapToFocus处于启用状态。如果您希望在开始点击聚焦时显示屏幕动画,您可以使用SwiftyCamDidFocusAtPoint(focusPoint:)来获取点击的坐标并提供您自己的点击动画

设备方向

默认情况下,SwiftyCam会将照片方向设置为竖屏。如果您希望保留捕获照片的方向以支持横向图像,请使用shouldUseDeviceOrientation属性

shouldUseDeviceOrientation = true

背景音频

SwiftyCam 允许在会话中继续播放背景音频,并将其捕获到录像中。默认情况下,此功能已启用。如果希望禁用此功能,请更改 allowBackgroundAudio 属性。

allowBackgroundAudio = false

低光增强

对于支持的型号(iPhone 5 和 5C),当检测到录制会话处于低光区域时,AVCaptureDevice 支持低光增强。默认情况下,此设置设置为 true。它可以使用 lowLightBoost 变量进行修改。

lowLightBoost = false

隐私

当用户首次启动 SwiftyCamViewController 时,将会提示用户权限,以访问摄像头和麦克风。默认情况下,如果用户拒绝访问硬件,SwiftyCam 将在 iOS 设置应用程序内提供对 App 隐私设置的提示。

杂项

其他属性

  • isCameraFlashOn - 布尔值
  • isVideoRecording - 布尔值
  • isSessionRunning - 布尔值
  • currentCamera - CameraSelection

联系信息

如果您有任何问题、请求或增强建议,请随意提交一个拉取请求,创建一个问题或直接与我联系。

Andrew Walz [email protected]