
SwiftyCam是简单,Snapchat风格的iOS相机框架,可轻松拍照和视频捕获。 SwiftyCAM允许用户从同一会话中捕获照片和视频,但很少配置。
在Avounation中配置相机视图控制器可能会很乏味且耗时。 SwiftyCAM是视图控制器的下降,可以完全控制公寓。
| swiftycam | |
|---|---|
| Snapchat风格的媒体捕获 | |
| 支持ios8+ | |
| 图像捕获 | |
| 视频捕获 | |
| 手动图像质量设置 | |
| 前后摄像头支撑 | |
| 前后闪光 | |
| 视网膜闪存支撑 | |
| 支持手动变焦 | |
| 支持手动重点 | |
| 低光设置 | |
| 背景音频支持 |
SwiftyCAM可根据BSD许可获得。有关更多信息,请参见许可证文件。
SwiftyCAM可通过可可录提供。要安装它,只需将以下行添加到您的podfile:
pod "SwiftyCam"将其添加到Cartfile
github "Awalz/SwiftyCam" ~> 2.2.1
$ carthage update SwiftyCam
只需将源文件夹的内容复制到您的项目中。
使用SwiftyCam非常简单。
从iOS 10开始,Apple要求您的应用程序的infos.splat of 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子类。用SwiftyCamViewController替换UiviewController子类声明:
class MyCameraViewController : SwiftyCamViewController这就是设置图片和视频捕获的Avsession所需的一切。 SwiftyCAM将提示用户使用相机/麦克风的权限,并配置设备输入和输出。
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属性来启用Flash(Torch):
flashEnabled = true现在,闪光灯用于前后摄像头。
对于照片,摄像头会像托管iOS相机一样闪烁。对于视频,火炬(Flash)将在视频捕获过程中启用。
对于支持Retina Flash的模型,前置摄像头将使用默认闪光灯进行图像捕获。如果不支持视网膜闪光灯,则使用类似于Snapchat的人造视网膜闪光灯。
对于面向前视频,在视频捕获期间,将在视频供稿上放置白色的85%不透明的视图。
默认情况下,SwiftyCam将启动到后面摄像头。可以通过更改viewDidLoad中的defaultCamera属性来更改:
override func viewDidLoad ( ) {
super . viewDidLoad ( )
defaultCamera = . front
...
}Swiftycam支持从前后摄像机捕获。要切换摄像机,请调用该功能:
switchCamera ( )当选择前置摄像头时,不支持对聚焦,捏合Zoom和相机闪光灯。当前不支持视频时切换视频
SwiftyCam还可以通过双龙头手势在摄像机之间切换。要禁用此功能,请使用doubleTapCameraSwitch属性:
doubleTapCameraSwitch = falseSwiftyCAM有几种配置捕获功能的选项:
可以通过SwiftyCamviewController的视频质量属性来设置视频质量。可用的选择对应于匹配的avcapturesessessest :
| 视频素 | avcapturesessessesset |
|---|---|
.high | AvcapturePresthigh |
.medium | avcapturePresetmedium |
.low | avcapturepresetlow |
.resolution352x288 | Avcapturesessessesset352x288 |
.resolution640x480 | Avcapturesessessessetreset640x480 |
.resolution1280x720 | Avcapturesessessesset1280x720 |
.resolution1920x1080 | Avcapturesessesseessestreset1920x1080 |
.resolution3840x2160 | Avcapturesessessesset3840x2160 |
.iframe960x540 | avcapturesessessesseessementiframe960x540 |
.iframe1280x720 | Avcapturesessessessesseprrame1280x720 |
默认值为。高。为了与前置摄像头一起使用,将始终使用高。
如果使用SwiftyCambutton,则可以为视频长度设置最大视频持续时间。一旦达到了时间限制,我将自动停止视频录制,并且将调用SwiftyCamDidFinishRecordingVideo的代表方法。要设置此值,只需更改maximumVideoDuration值:
maximumVideoDuration = 10.0值为0.0的值将允许通过SwiftyCambutton进行无限的视频录制。默认值为0.0 。
SwiftyCam通过Pinch和Pan手势支持相机会话的数字变焦。手势的工作原理与默认的iOS应用程序相似,并将缩放到最大支持的缩放级别。相机变焦仅在后面的摄像头上支撑。 AvFoundation当前不支持前面相机变焦。要禁用此功能,请更改pinchToZoom属性:
pinchToZoom = false默认情况下,启用了pinchToZoom 。
Swiftycam还支持使用垂直锅手势缩小后置摄像头的能力。要禁用此功能,请更改swipeToZoom属性:
swipeToZoom = false默认情况下,启用了swipeToZoom 。默认的手势在捕获会话中放大,并向下滑动,然后向上滑动放大。这可以通过更改swipeToZoomInverted属性来逆转:
swipeToZoomInverted = true您还可以限制后面摄像头可以放大的数量。为此,请使用maxZoomScale属性:
maxZoomScale = 2.0默认情况下, maxZoomScale设置为无限。实际的最大变焦级别由设备的VideoMaxzoomFactor确定。
默认情况下,SwiftyCam支持点击专注于视频预览。 SwiftyCAM将将会话的焦点和暴露水平设置为敲击点。虽然两台摄像头都支持TAP要进行设置曝光,但仅在后面摄像头上支持Tap to Focus。一旦SwiftyCAM检测到挖掘点的显着运动,自动对焦和自动暴露将被恢复。要禁用此功能,请更改tapToFocus属性:
tapToFocus = false默认情况下,启用了tapToFocus 。如果您想在启动点击焦点时SwiftyCamDidFocusAtPoint(focusPoint:)屏幕动画上显示一个在屏幕动画上
默认情况下,SwiftyCam将将照片定位设置为肖像。如果您希望保留捕获照片的方向以允许对景观图像的支持,请使用shouldUseDeviceOrientation属性:
shouldUseDeviceOrientation = trueSwiftyCam有能力允许背景音频在会话中继续播放,并可以被视频录制捕获。默认情况下,这将启用。如果您想禁用此功能,请更改allowBackgroundAudio属性:
allowBackgroundAudio = false对于受支持的型号(iPhone 5和5C),当检测到捕获会话位于弱光区域时,AVCAPTUREDEVICE会支持低光提升。默认情况下,这将设置为true。可以使用lowLightBoost变量进行修改:
lowLightBoost = false当用户首先启动SwiftyCamviewController时,将提示他们允许访问摄像机和麦克风。默认情况下,如果用户拒绝对硬件的访问,则SWIFTYCAM将为iOS设置应用程序内的应用程序隐私设置提供提示。
其他属性:
isCameraFlashOn -booleanisVideoRecording -booleanisSessionRunning -BooleancurrentCamera -CamerAselection如果您有任何疑问,请求或增强功能,请随时提交拉动请求,创建问题或亲自与我联系:
Andrew Walz [email protected]