Merge branch 'autoflash' into swifty_master

# Conflicts:
#	DemoSwiftyCam/DemoSwiftyCam.xcodeproj/project.pbxproj
#	DemoSwiftyCam/DemoSwiftyCam/ViewController.swift
This commit is contained in:
gazz 2018-12-06 11:30:51 +01:00
commit addff327d6
6 changed files with 94 additions and 36 deletions

View file

@ -39,6 +39,11 @@
"idiom" : "iphone", "idiom" : "iphone",
"size" : "60x60", "size" : "60x60",
"scale" : "3x" "scale" : "3x"
},
{
"idiom" : "ios-marketing",
"size" : "1024x1024",
"scale" : "1x"
} }
], ],
"info" : { "info" : {

View file

@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "flashauto@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "flashauto@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -31,8 +31,8 @@ class ViewController: SwiftyCamViewController, SwiftyCamViewControllerDelegate {
shouldUseDeviceOrientation = true shouldUseDeviceOrientation = true
allowAutoRotate = true allowAutoRotate = true
audioEnabled = true audioEnabled = true
flashMode = .auto
// disable capture button until session starts flashButton.setImage(#imageLiteral(resourceName: "flashauto"), for: UIControlState())
captureButton.buttonEnabled = false captureButton.buttonEnabled = false
} }
@ -109,7 +109,7 @@ class ViewController: SwiftyCamViewController, SwiftyCamViewControllerDelegate {
} }
@IBAction func toggleFlashTapped(_ sender: Any) { @IBAction func toggleFlashTapped(_ sender: Any) {
flashEnabled = !flashEnabled //flashEnabled = !flashEnabled
toggleFlashAnimation() toggleFlashAnimation()
} }
} }
@ -152,10 +152,16 @@ extension ViewController {
} }
fileprivate func toggleFlashAnimation() { fileprivate func toggleFlashAnimation() {
if flashEnabled == true { //flashEnabled = !flashEnabled
flashButton.setImage(#imageLiteral(resourceName: "flash"), for: UIControl.State()) if flashMode == .auto{
} else { flashMode = .on
flashButton.setImage(#imageLiteral(resourceName: "flashOutline"), for: UIControl.State()) flashButton.setImage(#imageLiteral(resourceName: "flash"), for: UIControlState())
}else if flashMode == .on{
flashMode = .off
flashButton.setImage(#imageLiteral(resourceName: "flashOutline"), for: UIControlState())
}else if flashMode == .off{
flashMode = .auto
flashButton.setImage(#imageLiteral(resourceName: "flashauto"), for: UIControlState())
} }
} }
} }

View file

@ -1,4 +1,4 @@
/*Copyright (c) 2016, Andrew Walz. /*Copyright (c) 2016, Andrew Walz.
Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met: Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met:
@ -35,6 +35,18 @@ open class SwiftyCamViewController: UIViewController {
/// Camera on the front of the device /// Camera on the front of the device
case front = "front" case front = "front"
} }
public enum FlashMode{
//Flash mode is set to auto
case auto
//Flash mode is set to on
case on
//Flash mode is set to off
case off
}
/// Enumeration for video quality of the capture session. Corresponds to a AVCaptureSessionPreset /// Enumeration for video quality of the capture session. Corresponds to a AVCaptureSessionPreset
@ -102,8 +114,11 @@ open class SwiftyCamViewController: UIViewController {
public var videoQuality : VideoQuality = .high public var videoQuality : VideoQuality = .high
/// Sets whether flash is enabled for photo and video capture /// Sets whether flash is enabled for photo and video capture
@available(*, deprecated, message: "use flashMode .on or .off") //use flashMode
public var flashEnabled = false public var flashEnabled = false
// Flash Mode
public var flashMode:FlashMode = .off
/// Sets whether Pinch to Zoom is enabled for the capture session /// Sets whether Pinch to Zoom is enabled for the capture session
@ -452,32 +467,32 @@ open class SwiftyCamViewController: UIViewController {
return return
} }
if device.hasFlash == true && flashMode != .off /* TODO: Add Support for Retina Flash and add front flash */ {
if device.hasFlash == true && flashEnabled == true /* TODO: Add Support for Retina Flash and add front flash */ { changeFlashSettings(device: device, mode: flashMode)
changeFlashSettings(device: device, mode: .on)
capturePhotoAsyncronously(completionHandler: { (_) in }) capturePhotoAsyncronously(completionHandler: { (_) in })
} else if device.hasFlash == false && flashEnabled == true && currentCamera == .front { // } else if device.hasFlash == false && flashMode == .on && currentCamera == .front {
flashView = UIView(frame: view.frame) // flashView = UIView(frame: view.frame)
flashView?.alpha = 0.0 // flashView?.alpha = 0.0
flashView?.backgroundColor = UIColor.white // flashView?.backgroundColor = UIColor.white
previewLayer.addSubview(flashView!) // previewLayer.addSubview(flashView!)
//
UIView.animate(withDuration: 0.1, delay: 0.0, options: .curveEaseInOut, animations: { // UIView.animate(withDuration: 0.1, delay: 0.0, options: .curveEaseInOut, animations: {
self.flashView?.alpha = 1.0 // self.flashView?.alpha = 1.0
//
}, completion: { (_) in // }, completion: { (_) in
self.capturePhotoAsyncronously(completionHandler: { (success) in // self.capturePhotoAsyncronously(completionHandler: { (success) in
UIView.animate(withDuration: 0.1, delay: 0.0, options: .curveEaseInOut, animations: { // UIView.animate(withDuration: 0.1, delay: 0.0, options: .curveEaseInOut, animations: {
self.flashView?.alpha = 0.0 // self.flashView?.alpha = 0.0
}, completion: { (_) in // }, completion: { (_) in
self.flashView?.removeFromSuperview() // self.flashView?.removeFromSuperview()
}) // })
}) // })
}) // })
} else { // } else {
}else{
if device.isFlashActive == true { if device.isFlashActive == true {
changeFlashSettings(device: device, mode: .off) changeFlashSettings(device: device, mode: flashMode)
} }
capturePhotoAsyncronously(completionHandler: { (_) in }) capturePhotoAsyncronously(completionHandler: { (_) in })
} }
@ -501,11 +516,11 @@ open class SwiftyCamViewController: UIViewController {
return return
} }
if currentCamera == .rear && flashEnabled == true { if currentCamera == .rear && flashMode == .on {
enableFlash() enableFlash()
} }
if currentCamera == .front && flashEnabled == true { if currentCamera == .front && flashMode == .on {
flashView = UIView(frame: view.frame) flashView = UIView(frame: view.frame)
flashView?.backgroundColor = UIColor.white flashView?.backgroundColor = UIColor.white
flashView?.alpha = 0.85 flashView?.alpha = 0.85
@ -563,7 +578,7 @@ open class SwiftyCamViewController: UIViewController {
movieFileOutput!.stopRecording() movieFileOutput!.stopRecording()
disableFlash() disableFlash()
if currentCamera == .front && flashEnabled == true && flashView != nil { if currentCamera == .front && flashMode == .on && flashView != nil {
UIView.animate(withDuration: 0.1, delay: 0.0, options: .curveEaseInOut, animations: { UIView.animate(withDuration: 0.1, delay: 0.0, options: .curveEaseInOut, animations: {
self.flashView?.alpha = 0.0 self.flashView?.alpha = 0.0
}, completion: { (_) in }, completion: { (_) in
@ -917,9 +932,19 @@ open class SwiftyCamViewController: UIViewController {
/// Enable or disable flash for photo /// Enable or disable flash for photo
fileprivate func changeFlashSettings(device: AVCaptureDevice, mode: AVCaptureDevice.FlashMode) { fileprivate func changeFlashSettings(device: AVCaptureDevice, mode: FlashMode) {
do { do {
try device.lockForConfiguration() try device.lockForConfiguration()
let mode:AVCaptureDevice.FlashMode
switch flashMode{
case .on:
mode = .on
case .off:
mode = .off
case .auto:
mode = .auto
}
device.flashMode = mode device.flashMode = mode
device.unlockForConfiguration() device.unlockForConfiguration()
} catch { } catch {