概述
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中添加NSCameraUsageDescription
和NSMicrophoneUsageDescription
字符串。示例
<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]