mirror of
https://github.com/samsonjs/SwiftyCam.git
synced 2026-04-27 15:07:43 +00:00
New flash settings working for rear camera
This commit is contained in:
parent
bf4bd9ce97
commit
1abe380628
3 changed files with 60 additions and 32 deletions
|
|
@ -71,7 +71,7 @@ class ViewController: SwiftyCamViewController, SwiftyCamViewControllerDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func toggleFlashAction(_ sender: Any) {
|
@IBAction func toggleFlashAction(_ sender: Any) {
|
||||||
toggleFlash()
|
flashEnabled = !flashEnabled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,13 @@ open class SwiftyCamViewController: UIViewController {
|
||||||
|
|
||||||
public var videoQuality : VideoQuality = .high
|
public var videoQuality : VideoQuality = .high
|
||||||
|
|
||||||
|
// Sets whether camera flash will be used to take photo
|
||||||
|
// For photos, camera flash will be enabled when photo is taken
|
||||||
|
// For videos, camera flash will be enabled for the duration of the video
|
||||||
|
// Not currently supported for front facing camera
|
||||||
|
|
||||||
|
public var flashEnabled = false
|
||||||
|
|
||||||
// Sets whether Pinch to Zoom is supported for the capture session
|
// Sets whether Pinch to Zoom is supported for the capture session
|
||||||
// Pinch to zoom not supported on front facing camera
|
// Pinch to zoom not supported on front facing camera
|
||||||
|
|
||||||
|
|
@ -131,7 +138,7 @@ open class SwiftyCamViewController: UIViewController {
|
||||||
|
|
||||||
fileprivate var beginZoomScale = CGFloat(1.0)
|
fileprivate var beginZoomScale = CGFloat(1.0)
|
||||||
|
|
||||||
// Variable for storing result of Capture Session setup
|
// Variable to store result of capture session setup
|
||||||
|
|
||||||
fileprivate var setupResult = SessionSetupResult.success
|
fileprivate var setupResult = SessionSetupResult.success
|
||||||
|
|
||||||
|
|
@ -241,7 +248,7 @@ open class SwiftyCamViewController: UIViewController {
|
||||||
self.isSessionRunning = false
|
self.isSessionRunning = false
|
||||||
}
|
}
|
||||||
|
|
||||||
//Disble flash if it is currently enables
|
//Disble flash if it is currently enabled
|
||||||
disableFlash()
|
disableFlash()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -250,6 +257,21 @@ open class SwiftyCamViewController: UIViewController {
|
||||||
// Capture photo from session
|
// Capture photo from session
|
||||||
|
|
||||||
public func takePhoto() {
|
public func takePhoto() {
|
||||||
|
|
||||||
|
guard videoDevice != nil else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if videoDevice!.hasFlash && currentCamera == .rear && flashEnabled == true /* TODO: Add Support for Retina Flash and add front flash */ {
|
||||||
|
do {
|
||||||
|
try videoDevice!.lockForConfiguration()
|
||||||
|
videoDevice?.flashMode = .on
|
||||||
|
videoDevice!.unlockForConfiguration()
|
||||||
|
} catch {
|
||||||
|
print("[SwiftyCam]: \(error)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let videoConnection = photoFileOutput?.connection(withMediaType: AVMediaTypeVideo) {
|
if let videoConnection = photoFileOutput?.connection(withMediaType: AVMediaTypeVideo) {
|
||||||
videoConnection.videoOrientation = AVCaptureVideoOrientation.portrait
|
videoConnection.videoOrientation = AVCaptureVideoOrientation.portrait
|
||||||
photoFileOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: {(sampleBuffer, error) in
|
photoFileOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: {(sampleBuffer, error) in
|
||||||
|
|
@ -271,6 +293,10 @@ open class SwiftyCamViewController: UIViewController {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if currentCamera == .rear && flashEnabled == true {
|
||||||
|
enableFlash()
|
||||||
|
}
|
||||||
|
|
||||||
let videoPreviewLayerOrientation = previewLayer!.videoPreviewLayer.connection.videoOrientation
|
let videoPreviewLayerOrientation = previewLayer!.videoPreviewLayer.connection.videoOrientation
|
||||||
|
|
||||||
sessionQueue.async { [unowned self] in
|
sessionQueue.async { [unowned self] in
|
||||||
|
|
@ -308,6 +334,7 @@ open class SwiftyCamViewController: UIViewController {
|
||||||
if self.movieFileOutput?.isRecording == true {
|
if self.movieFileOutput?.isRecording == true {
|
||||||
self.isVideRecording = false
|
self.isVideRecording = false
|
||||||
movieFileOutput!.stopRecording()
|
movieFileOutput!.stopRecording()
|
||||||
|
disableFlash()
|
||||||
self.cameraDelegate?.SwiftyCamDidFinishRecordingVideo()
|
self.cameraDelegate?.SwiftyCamDidFinishRecordingVideo()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -349,35 +376,6 @@ open class SwiftyCamViewController: UIViewController {
|
||||||
disableFlash()
|
disableFlash()
|
||||||
}
|
}
|
||||||
|
|
||||||
public func toggleFlash() {
|
|
||||||
guard self.currentCamera == .rear else {
|
|
||||||
// Flash is not supported for front facing camera
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
|
|
||||||
// Check if device has a flash
|
|
||||||
if (device?.hasTorch)! {
|
|
||||||
do {
|
|
||||||
try device?.lockForConfiguration()
|
|
||||||
if (device?.torchMode == AVCaptureTorchMode.on) {
|
|
||||||
device?.torchMode = AVCaptureTorchMode.off
|
|
||||||
self.isCameraFlashOn = false
|
|
||||||
} else {
|
|
||||||
do {
|
|
||||||
try device?.setTorchModeOnWithLevel(1.0)
|
|
||||||
self.isCameraFlashOn = true
|
|
||||||
} catch {
|
|
||||||
print("[SwiftyCam]: \(error)")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
device?.unlockForConfiguration()
|
|
||||||
} catch {
|
|
||||||
print("[SwiftyCam]: \(error)")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Override Touches Began
|
// Override Touches Began
|
||||||
// Used for Tap to Focus
|
// Used for Tap to Focus
|
||||||
|
|
||||||
|
|
@ -676,6 +674,35 @@ open class SwiftyCamViewController: UIViewController {
|
||||||
toggleFlash()
|
toggleFlash()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileprivate func toggleFlash() {
|
||||||
|
guard self.currentCamera == .rear else {
|
||||||
|
// Flash is not supported for front facing camera
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let device = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo)
|
||||||
|
// Check if device has a flash
|
||||||
|
if (device?.hasTorch)! {
|
||||||
|
do {
|
||||||
|
try device?.lockForConfiguration()
|
||||||
|
if (device?.torchMode == AVCaptureTorchMode.on) {
|
||||||
|
device?.torchMode = AVCaptureTorchMode.off
|
||||||
|
self.isCameraFlashOn = false
|
||||||
|
} else {
|
||||||
|
do {
|
||||||
|
try device?.setTorchModeOnWithLevel(1.0)
|
||||||
|
self.isCameraFlashOn = true
|
||||||
|
} catch {
|
||||||
|
print("[SwiftyCam]: \(error)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
device?.unlockForConfiguration()
|
||||||
|
} catch {
|
||||||
|
print("[SwiftyCam]: \(error)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension SwiftyCamViewController : SwiftyCamButtonDelegate {
|
extension SwiftyCamViewController : SwiftyCamButtonDelegate {
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@ public protocol SwiftyCamViewControllerDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
public extension SwiftyCamViewControllerDelegate {
|
public extension SwiftyCamViewControllerDelegate {
|
||||||
|
|
||||||
func SwiftyCamDidTakePhoto(_ photo:UIImage) {
|
func SwiftyCamDidTakePhoto(_ photo:UIImage) {
|
||||||
// Optional
|
// Optional
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue