Commit b040107c by Daniel Dahan

updated CaptureView example with alpha Capture support

parent 416b3751
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
967C0E5C1C1CB980005175A6 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 967C0E5B1C1CB980005175A6 /* ViewController.swift */; }; 967C0E5C1C1CB980005175A6 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 967C0E5B1C1CB980005175A6 /* ViewController.swift */; };
967C0E611C1CB980005175A6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 967C0E601C1CB980005175A6 /* Assets.xcassets */; }; 967C0E611C1CB980005175A6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 967C0E601C1CB980005175A6 /* Assets.xcassets */; };
967C0E641C1CB980005175A6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 967C0E621C1CB980005175A6 /* LaunchScreen.storyboard */; }; 967C0E641C1CB980005175A6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 967C0E621C1CB980005175A6 /* LaunchScreen.storyboard */; };
967C0E791C1DF346005175A6 /* MaterialKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 967C0E781C1DF346005175A6 /* MaterialKit.framework */; };
967C0E7A1C1DF346005175A6 /* MaterialKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 967C0E781C1DF346005175A6 /* MaterialKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */ /* Begin PBXCopyFilesBuildPhase section */
...@@ -20,6 +22,7 @@ ...@@ -20,6 +22,7 @@
dstPath = ""; dstPath = "";
dstSubfolderSpec = 10; dstSubfolderSpec = 10;
files = ( files = (
967C0E7A1C1DF346005175A6 /* MaterialKit.framework in Embed Frameworks */,
); );
name = "Embed Frameworks"; name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
...@@ -33,6 +36,7 @@ ...@@ -33,6 +36,7 @@
967C0E601C1CB980005175A6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; 967C0E601C1CB980005175A6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
967C0E631C1CB980005175A6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 967C0E631C1CB980005175A6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
967C0E651C1CB980005175A6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 967C0E651C1CB980005175A6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
967C0E781C1DF346005175A6 /* MaterialKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; name = MaterialKit.framework; path = "/Users/danieldahan/Library/Developer/Xcode/DerivedData/MaterialKit-anypxbsecgdqqxevbavirvnffqxd/Build/Products/Debug-iphoneos/MaterialKit.framework"; sourceTree = "<absolute>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
...@@ -40,6 +44,7 @@ ...@@ -40,6 +44,7 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
967C0E791C1DF346005175A6 /* MaterialKit.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
...@@ -49,6 +54,7 @@ ...@@ -49,6 +54,7 @@
967C0E4D1C1CB980005175A6 = { 967C0E4D1C1CB980005175A6 = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
967C0E781C1DF346005175A6 /* MaterialKit.framework */,
967C0E581C1CB980005175A6 /* CaptureView */, 967C0E581C1CB980005175A6 /* CaptureView */,
967C0E571C1CB980005175A6 /* Products */, 967C0E571C1CB980005175A6 /* Products */,
); );
......
{
"images" : [
{
"idiom" : "universal",
"filename" : "ic_close_white.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "ic_close_white@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "ic_close_white@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
\ No newline at end of file
{
"images" : [
{
"idiom" : "universal",
"filename" : "ic_switch_camera_white.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "ic_switch_camera_white@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "ic_switch_camera_white@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
\ No newline at end of file
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>en</string> <string>en</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
......
...@@ -20,31 +20,62 @@ import UIKit ...@@ -20,31 +20,62 @@ import UIKit
import MaterialKit import MaterialKit
class ViewController: UIViewController { class ViewController: UIViewController {
private lazy var captureView: CaptureView = CaptureView()
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
prepareView() prepareView()
prepareCaptureView()
// Examples of using CaptureView.
prepareGeneralCaptureViewExample()
} }
/** /**
:name: prepareView :name: prepareView
:description: General preparation statements.
*/ */
private func prepareView() { private func prepareView() {
view.backgroundColor = MaterialColor.white view.backgroundColor = MaterialColor.white
} }
/** /**
:name: prepareGeneralCaptureViewExample :name: prepareCaptureView
:description: General usage example.
*/ */
private func prepareGeneralCaptureViewExample() { private func prepareCaptureView() {
let v: CaptureView = CaptureView(frame: view.bounds) let img1: UIImage? = UIImage(named: "ic_flash_auto_white")
v.switchCamerasButton = FabButton() let btn1: FlatButton = FlatButton()
btn1.pulseColor = nil
btn1.setImage(img1, forState: .Normal)
btn1.setImage(img1, forState: .Highlighted)
btn1.addTarget(self, action: "handleFlash:", forControlEvents: .TouchUpInside)
let img2: UIImage? = UIImage(named: "ic_switch_camera_white")
let btn2: FlatButton = FlatButton()
btn2.pulseColor = nil
btn2.setImage(img2, forState: .Normal)
btn2.setImage(img2, forState: .Highlighted)
view.addSubview(v) captureView.flashAutoButton = btn1
captureView.switchCamerasButton = btn2
captureView.navigationBarView.rightButtons = [btn1, btn2]
view.addSubview(captureView)
captureView.translatesAutoresizingMaskIntoConstraints = false
MaterialLayout.alignToParent(view, child: captureView)
}
internal func handleFlash(sender: AnyObject) {
var img: UIImage?
switch captureView.previewView.captureSession.flashMode {
case .Off:
img = UIImage(named: "ic_flash_on_white")
print("Flash On")
case .On:
img = UIImage(named: "ic_flash_auto_white")
print("Flash Auto")
case .Auto:
img = UIImage(named: "ic_flash_off_white")
print("Flash Off")
}
captureView.flashAutoButton?.setImage(img, forState: .Normal)
captureView.flashAutoButton?.setImage(img, forState: .Highlighted)
} }
} }
...@@ -35,14 +35,37 @@ public class CaptureView : MaterialView, CaptureSessionDelegate, CapturePreviewV ...@@ -35,14 +35,37 @@ public class CaptureView : MaterialView, CaptureSessionDelegate, CapturePreviewV
public private(set) lazy var exposureLayer: MaterialLayer = MaterialLayer() public private(set) lazy var exposureLayer: MaterialLayer = MaterialLayer()
/** /**
:name: navigationBarView
*/
public private(set) lazy var navigationBarView: NavigationBarView = NavigationBarView()
/**
:name: flashAutoButton
*/
public var flashAutoButton: MaterialButton? {
didSet {
if let v: MaterialButton = flashAutoButton {
v.removeTarget(self, action: "handleFlashAuto:", forControlEvents: .TouchUpInside)
v.addTarget(self, action: "handleFlashAuto:", forControlEvents: .TouchUpInside)
} else {
flashAutoButton?.removeFromSuperview()
flashAutoButton = nil
}
}
}
/**
:name: switchCamerasButton :name: switchCamerasButton
*/ */
public var switchCamerasButton: MaterialButton? { public var switchCamerasButton: MaterialButton? {
didSet { didSet {
if let v: MaterialButton = switchCamerasButton { if let v: MaterialButton = switchCamerasButton {
v.translatesAutoresizingMaskIntoConstraints = false v.removeTarget(self, action: "handleSwitchCamera:", forControlEvents: .TouchUpInside)
v.addTarget(self, action: "handleSwitchCamera:", forControlEvents: .TouchUpInside)
} else {
switchCamerasButton?.removeFromSuperview()
switchCamerasButton = nil
} }
reloadView()
} }
} }
...@@ -100,20 +123,14 @@ public class CaptureView : MaterialView, CaptureSessionDelegate, CapturePreviewV ...@@ -100,20 +123,14 @@ public class CaptureView : MaterialView, CaptureSessionDelegate, CapturePreviewV
v.removeFromSuperview() v.removeFromSuperview()
} }
// var verticalFormat: String = "V:|"
// var views: Dictionary<String, AnyObject> = Dictionary<String, AnyObject>()
// var metrics: Dictionary<String, AnyObject> = Dictionary<String, AnyObject>()
addSubview(previewView) addSubview(previewView)
MaterialLayout.alignToParent(self, child: previewView) MaterialLayout.alignToParent(self, child: previewView)
if let v: MaterialButton = switchCamerasButton { addSubview(navigationBarView)
addSubview(v)
MaterialLayout.alignFromBottomRight(self, child: v, bottom: contentInsetsRef.bottom, right: contentInsetsRef.right) // var verticalFormat: String = "V:|"
MaterialLayout.size(self, child: v, width: switchCamerasButtonSize.width, height: switchCamerasButtonSize.height) // var views: Dictionary<String, AnyObject> = Dictionary<String, AnyObject>()
v.removeTarget(self, action: "handleSwitchCameras", forControlEvents: .TouchUpInside) // var metrics: Dictionary<String, AnyObject> = Dictionary<String, AnyObject>()
v.addTarget(self, action: "handleSwitchCameras", forControlEvents: .TouchUpInside)
}
// if 0 < views.count { // if 0 < views.count {
// addConstraints(MaterialLayout.constraint(verticalFormat, options: [], metrics: metrics, views: views)) // addConstraints(MaterialLayout.constraint(verticalFormat, options: [], metrics: metrics, views: views))
...@@ -177,19 +194,46 @@ public class CaptureView : MaterialView, CaptureSessionDelegate, CapturePreviewV ...@@ -177,19 +194,46 @@ public class CaptureView : MaterialView, CaptureSessionDelegate, CapturePreviewV
public override func prepareView() { public override func prepareView() {
super.prepareView() super.prepareView()
preparePreviewView() preparePreviewView()
prepareNavigationBarView()
prepareFocusLayer() prepareFocusLayer()
prepareExposureLayer() prepareExposureLayer()
reloadView() reloadView()
} }
/** /**
:name: handleSwitchCameras :name: handleSwitchCamera
*/ */
internal func handleSwitchCameras() { internal func handleSwitchCamera(button: MaterialButton) {
previewView.captureSession.switchCameras() previewView.captureSession.switchCameras()
} }
/** /**
:name: handleFlashAuto
*/
internal func handleFlashAuto(button: MaterialButton) {
switch previewView.captureSession.flashMode {
case .Off:
previewView.captureSession.flashMode = .On
print("On")
case .On:
previewView.captureSession.flashMode = .Off
print("Auto")
case .Auto:
print("Off")
previewView.captureSession.flashMode = .On
}
}
/**
:name: prepareNavigationBarView
*/
private func prepareNavigationBarView() {
navigationBarView.backgroundColor = MaterialColor.black.colorWithAlphaComponent(0.3)
navigationBarView.shadowDepth = .None
navigationBarView.statusBarStyle = .LightContent
}
/**
:name: preparePreviewView :name: preparePreviewView
*/ */
private func preparePreviewView() { private func preparePreviewView() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment