Added optional delegate methods for running session and added enabled property to SwiftyCamButton

This commit is contained in:
Andrew Walz 2017-09-06 12:33:59 -06:00
parent ad38933dca
commit d837d4d71e
4 changed files with 106 additions and 31 deletions

View file

@ -18,10 +18,9 @@ import UIKit
class ViewController: SwiftyCamViewController, SwiftyCamViewControllerDelegate {
@IBOutlet weak var captureButton: SwiftyRecordButton!
@IBOutlet weak var flipCameraButton: UIButton!
@IBOutlet weak var flashButton: UIButton!
@IBOutlet weak var captureButton : SwiftyRecordButton!
@IBOutlet weak var flipCameraButton : UIButton!
@IBOutlet weak var flashButton : UIButton!
override func viewDidLoad() {
super.viewDidLoad()
@ -31,6 +30,9 @@ class ViewController: SwiftyCamViewController, SwiftyCamViewControllerDelegate {
shouldUseDeviceOrientation = true
allowAutoRotate = true
audioEnabled = true
// disable capture button until session starts
captureButton.buttonEnabled = false
}
override var prefersStatusBarHidden: Bool {
@ -41,6 +43,17 @@ class ViewController: SwiftyCamViewController, SwiftyCamViewControllerDelegate {
super.viewDidAppear(animated)
captureButton.delegate = self
}
func swiftyCamSessionDidStartRunning(_ swiftyCam: SwiftyCamViewController) {
print("Session did start running")
captureButton.buttonEnabled = true
}
func swiftyCamSessionDidStopRunning(_ swiftyCam: SwiftyCamViewController) {
print("Session did stop running")
captureButton.buttonEnabled = false
}
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didTake photo: UIImage) {
let newVC = PhotoViewController(image: photo)
@ -50,19 +63,13 @@ class ViewController: SwiftyCamViewController, SwiftyCamViewControllerDelegate {
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didBeginRecordingVideo camera: SwiftyCamViewController.CameraSelection) {
print("Did Begin Recording")
captureButton.growButton()
UIView.animate(withDuration: 0.25, animations: {
self.flashButton.alpha = 0.0
self.flipCameraButton.alpha = 0.0
})
hideButtons()
}
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didFinishRecordingVideo camera: SwiftyCamViewController.CameraSelection) {
print("Did finish Recording")
captureButton.shrinkButton()
UIView.animate(withDuration: 0.25, animations: {
self.flashButton.alpha = 1.0
self.flipCameraButton.alpha = 1.0
})
showButtons()
}
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didFinishProcessVideoAt url: URL) {
@ -71,22 +78,8 @@ class ViewController: SwiftyCamViewController, SwiftyCamViewControllerDelegate {
}
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didFocusAtPoint point: CGPoint) {
let focusView = UIImageView(image: #imageLiteral(resourceName: "focus"))
focusView.center = point
focusView.alpha = 0.0
view.addSubview(focusView)
UIView.animate(withDuration: 0.25, delay: 0.0, options: .curveEaseInOut, animations: {
focusView.alpha = 1.0
focusView.transform = CGAffineTransform(scaleX: 1.25, y: 1.25)
}, completion: { (success) in
UIView.animate(withDuration: 0.15, delay: 0.5, options: .curveEaseInOut, animations: {
focusView.alpha = 0.0
focusView.transform = CGAffineTransform(translationX: 0.6, y: 0.6)
}, completion: { (success) in
focusView.removeFromSuperview()
})
})
print("Did focus at point: \(point)")
focusAnimationAt(point)
}
func swiftyCamDidFailToConfigure(_ swiftyCam: SwiftyCamViewController) {
@ -103,7 +96,6 @@ class ViewController: SwiftyCamViewController, SwiftyCamViewControllerDelegate {
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didSwitchCameras camera: SwiftyCamViewController.CameraSelection) {
print("Camera did change to \(camera.rawValue)")
print(camera)
}
@ -117,7 +109,48 @@ class ViewController: SwiftyCamViewController, SwiftyCamViewControllerDelegate {
@IBAction func toggleFlashTapped(_ sender: Any) {
flashEnabled = !flashEnabled
toggleFlashAnimation()
}
}
// UI Animations
extension ViewController {
fileprivate func hideButtons() {
UIView.animate(withDuration: 0.25) {
self.flashButton.alpha = 0.0
self.flipCameraButton.alpha = 0.0
}
}
fileprivate func showButtons() {
UIView.animate(withDuration: 0.25) {
self.flashButton.alpha = 1.0
self.flipCameraButton.alpha = 1.0
}
}
fileprivate func focusAnimationAt(_ point: CGPoint) {
let focusView = UIImageView(image: #imageLiteral(resourceName: "focus"))
focusView.center = point
focusView.alpha = 0.0
view.addSubview(focusView)
UIView.animate(withDuration: 0.25, delay: 0.0, options: .curveEaseInOut, animations: {
focusView.alpha = 1.0
focusView.transform = CGAffineTransform(scaleX: 1.25, y: 1.25)
}) { (success) in
UIView.animate(withDuration: 0.15, delay: 0.5, options: .curveEaseInOut, animations: {
focusView.alpha = 0.0
focusView.transform = CGAffineTransform(translationX: 0.6, y: 0.6)
}) { (success) in
focusView.removeFromSuperview()
}
}
}
fileprivate func toggleFlashAnimation() {
if flashEnabled == true {
flashButton.setImage(#imageLiteral(resourceName: "flash"), for: UIControlState())
} else {

View file

@ -54,6 +54,10 @@ open class SwiftyCamButton: UIButton {
public weak var delegate: SwiftyCamButtonDelegate?
// Sets whether button is enabled
public var buttonEnabled = true
/// Maximum duration variable
fileprivate var timer : Timer?
@ -76,11 +80,19 @@ open class SwiftyCamButton: UIButton {
/// UITapGestureRecognizer Function
@objc fileprivate func Tap() {
guard buttonEnabled == true else {
return
}
delegate?.buttonWasTapped()
}
/// UILongPressGestureRecognizer Function
@objc fileprivate func LongPress(_ sender:UILongPressGestureRecognizer!) {
guard buttonEnabled == true else {
return
}
switch sender.state {
case .began:
delegate?.buttonDidBeginLongPress()

View file

@ -359,8 +359,6 @@ open class SwiftyCamViewController: UIViewController {
NotificationCenter.default.addObserver(self, selector: #selector(captureSessionDidStopRunning), name: .AVCaptureSessionDidStopRunning, object: nil)
}
// MARK: ViewDidAppear
/// ViewDidAppear(_ animated:) Implementation
@ -1033,12 +1031,18 @@ open class SwiftyCamViewController: UIViewController {
@objc private func captureSessionDidStartRunning() {
sessionRunning = true
DispatchQueue.main.async {
self.cameraDelegate?.swiftyCamSessionDidStartRunning(self)
}
}
/// Called when Notification Center registers session stops running
@objc private func captureSessionDidStopRunning() {
sessionRunning = false
DispatchQueue.main.async {
self.cameraDelegate?.swiftyCamSessionDidStopRunning(self)
}
}
}

View file

@ -23,6 +23,24 @@ import AVFoundation
public protocol SwiftyCamViewControllerDelegate: class {
/**
SwiftyCamViewControllerDelegate function called when when SwiftyCamViewController session did start running.
Photos and video capture will be enabled.
- Parameter swiftyCam: Current SwiftyCamViewController
*/
func swiftyCamSessionDidStartRunning(_ swiftyCam: SwiftyCamViewController)
/**
SwiftyCamViewControllerDelegate function called when when SwiftyCamViewController session did stops running.
Photos and video capture will be disabled.
- Parameter swiftyCam: Current SwiftyCamViewController
*/
func swiftyCamSessionDidStopRunning(_ swiftyCam: SwiftyCamViewController)
/**
SwiftyCamViewControllerDelegate function called when the takePhoto() function is called.
@ -116,6 +134,14 @@ public protocol SwiftyCamViewControllerDelegate: class {
public extension SwiftyCamViewControllerDelegate {
func swiftyCamSessionDidStopRunning(_ swiftyCam: SwiftyCamViewController) {
// Optional
}
func swiftyCamSessionDidStartRunning(_ swiftyCam: SwiftyCamViewController) {
// Optional
}
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didTake photo: UIImage) {
// Optional
}