Merge branch 'master' into feature/swift4-auto-flash

# Conflicts:
#	DemoSwiftyCam/DemoSwiftyCam.xcodeproj/project.pbxproj
#	DemoSwiftyCam/DemoSwiftyCam/ViewController.swift
#	Source/SwiftyCamViewController.swift
This commit is contained in:
gazz 2018-04-12 12:40:41 +02:00
commit 8fd983de19
7 changed files with 102 additions and 38 deletions

View file

@ -188,8 +188,8 @@
};
1675A9711E00A68300B80903 = {
CreatedOnToolsVersion = 8.1;
LastSwiftMigration = 0900;
ProvisioningStyle = Automatic;
DevelopmentTeam = KNZW2F3F6V;
ProvisioningStyle = Manual;
};
};
};
@ -443,12 +443,15 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
DEVELOPMENT_TEAM = "";
CODE_SIGN_STYLE = Manual;
DEVELOPMENT_TEAM = KNZW2F3F6V;
INFOPLIST_FILE = DemoSwiftyCam/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.Walzy.DemoSwiftyCam1;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "392470bd-cfda-4593-a8ca-cd9af3eef31e";
PROVISIONING_PROFILE_SPECIFIER = "Officina Development Generic";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";
@ -459,12 +462,15 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
DEVELOPMENT_TEAM = "";
CODE_SIGN_STYLE = Manual;
DEVELOPMENT_TEAM = KNZW2F3F6V;
INFOPLIST_FILE = DemoSwiftyCam/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.Walzy.DemoSwiftyCam1;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "392470bd-cfda-4593-a8ca-cd9af3eef31e";
PROVISIONING_PROFILE_SPECIFIER = "Officina Development Generic";
SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.0;
TARGETED_DEVICE_FAMILY = "1,2";

View file

@ -39,6 +39,11 @@
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
},
{
"idiom" : "ios-marketing",
"size" : "1024x1024",
"scale" : "1x"
}
],
"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
allowAutoRotate = true
audioEnabled = true
// disable capture button until session starts
flashMode = .auto
flashButton.setImage(#imageLiteral(resourceName: "flashauto"), for: UIControlState())
captureButton.buttonEnabled = false
}
@ -109,7 +109,7 @@ class ViewController: SwiftyCamViewController, SwiftyCamViewControllerDelegate {
}
@IBAction func toggleFlashTapped(_ sender: Any) {
flashEnabled = !flashEnabled
//flashEnabled = !flashEnabled
toggleFlashAnimation()
}
}
@ -152,10 +152,16 @@ extension ViewController {
}
fileprivate func toggleFlashAnimation() {
if flashEnabled == true {
//flashEnabled = !flashEnabled
if flashMode == .auto{
flashMode = .on
flashButton.setImage(#imageLiteral(resourceName: "flash"), for: UIControlState())
} else {
}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:
@ -35,6 +35,18 @@ open class SwiftyCamViewController: UIViewController {
/// Camera on the front of the device
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
@ -102,8 +114,11 @@ open class SwiftyCamViewController: UIViewController {
public var videoQuality : VideoQuality = .high
/// Sets whether flash is enabled for photo and video capture
@available(*, deprecated, message: "use flashMode .on or .off") //use flashMode
public var flashEnabled = false
// Flash Mode
public var flashMode:FlashMode = .off
/// Sets whether Pinch to Zoom is enabled for the capture session
@ -448,32 +463,32 @@ open class SwiftyCamViewController: UIViewController {
return
}
if device.hasFlash == true && flashEnabled == true /* TODO: Add Support for Retina Flash and add front flash */ {
changeFlashSettings(device: device, mode: .on)
if device.hasFlash == true && flashMode != .off /* TODO: Add Support for Retina Flash and add front flash */ {
changeFlashSettings(device: device, mode: flashMode)
capturePhotoAsyncronously(completionHandler: { (_) in })
} else if device.hasFlash == false && flashEnabled == true && currentCamera == .front {
flashView = UIView(frame: view.frame)
flashView?.alpha = 0.0
flashView?.backgroundColor = UIColor.white
previewLayer.addSubview(flashView!)
UIView.animate(withDuration: 0.1, delay: 0.0, options: .curveEaseInOut, animations: {
self.flashView?.alpha = 1.0
}, completion: { (_) in
self.capturePhotoAsyncronously(completionHandler: { (success) in
UIView.animate(withDuration: 0.1, delay: 0.0, options: .curveEaseInOut, animations: {
self.flashView?.alpha = 0.0
}, completion: { (_) in
self.flashView?.removeFromSuperview()
})
})
})
} else {
// } else if device.hasFlash == false && flashMode == .on && currentCamera == .front {
// flashView = UIView(frame: view.frame)
// flashView?.alpha = 0.0
// flashView?.backgroundColor = UIColor.white
// previewLayer.addSubview(flashView!)
//
// UIView.animate(withDuration: 0.1, delay: 0.0, options: .curveEaseInOut, animations: {
// self.flashView?.alpha = 1.0
//
// }, completion: { (_) in
// self.capturePhotoAsyncronously(completionHandler: { (success) in
// UIView.animate(withDuration: 0.1, delay: 0.0, options: .curveEaseInOut, animations: {
// self.flashView?.alpha = 0.0
// }, completion: { (_) in
// self.flashView?.removeFromSuperview()
// })
// })
// })
// } else {
}else{
if device.isFlashActive == true {
changeFlashSettings(device: device, mode: .off)
changeFlashSettings(device: device, mode: flashMode)
}
capturePhotoAsyncronously(completionHandler: { (_) in })
}
@ -497,11 +512,11 @@ open class SwiftyCamViewController: UIViewController {
return
}
if currentCamera == .rear && flashEnabled == true {
if currentCamera == .rear && flashMode == .on {
enableFlash()
}
if currentCamera == .front && flashEnabled == true {
if currentCamera == .front && flashMode == .on {
flashView = UIView(frame: view.frame)
flashView?.backgroundColor = UIColor.white
flashView?.alpha = 0.85
@ -559,7 +574,7 @@ open class SwiftyCamViewController: UIViewController {
movieFileOutput!.stopRecording()
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: {
self.flashView?.alpha = 0.0
}, completion: { (_) in
@ -909,9 +924,19 @@ open class SwiftyCamViewController: UIViewController {
/// Enable or disable flash for photo
fileprivate func changeFlashSettings(device: AVCaptureDevice, mode: AVCaptureDevice.FlashMode) {
fileprivate func changeFlashSettings(device: AVCaptureDevice, mode: FlashMode) {
do {
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.unlockForConfiguration()
} catch {