mirror of
https://github.com/samsonjs/SwiftyCam.git
synced 2026-03-25 09:05:52 +00:00
Adding merge for device orientation
This commit is contained in:
commit
e1da22fdec
6 changed files with 1194 additions and 1239 deletions
|
|
@ -8,7 +8,6 @@
|
|||
|
||||
/* Begin PBXBuildFile section */
|
||||
16298B561E2703DC0056D413 /* SwiftyRecordButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16298B551E2703DC0056D413 /* SwiftyRecordButton.swift */; };
|
||||
165CDA841E68802500FD0343 /* UIImage+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 165CDA831E68802500FD0343 /* UIImage+Extension.swift */; };
|
||||
1675A9761E00A68300B80903 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1675A9751E00A68300B80903 /* AppDelegate.swift */; };
|
||||
1675A9781E00A68300B80903 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1675A9771E00A68300B80903 /* ViewController.swift */; };
|
||||
1675A97B1E00A68300B80903 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1675A9791E00A68300B80903 /* Main.storyboard */; };
|
||||
|
|
@ -24,7 +23,6 @@
|
|||
|
||||
/* Begin PBXFileReference section */
|
||||
16298B551E2703DC0056D413 /* SwiftyRecordButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftyRecordButton.swift; sourceTree = "<group>"; };
|
||||
165CDA831E68802500FD0343 /* UIImage+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Extension.swift"; sourceTree = "<group>"; };
|
||||
1675A9721E00A68300B80903 /* DemoSwiftyCam.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DemoSwiftyCam.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
1675A9751E00A68300B80903 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
1675A9771E00A68300B80903 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -91,7 +89,6 @@
|
|||
1675A98A1E00A74A00B80903 /* SwiftyCamButton.swift */,
|
||||
1675A98B1E00A74A00B80903 /* SwiftyCamViewController.swift */,
|
||||
1675A98C1E00A74A00B80903 /* SwiftyCamViewControllerDelegate.swift */,
|
||||
165CDA831E68802500FD0343 /* UIImage+Extension.swift */,
|
||||
);
|
||||
name = Source;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -128,7 +125,7 @@
|
|||
TargetAttributes = {
|
||||
1675A9711E00A68300B80903 = {
|
||||
CreatedOnToolsVersion = 8.1;
|
||||
DevelopmentTeam = LW28KCU8N5;
|
||||
DevelopmentTeam = 427VB57543;
|
||||
ProvisioningStyle = Automatic;
|
||||
};
|
||||
};
|
||||
|
|
@ -176,7 +173,6 @@
|
|||
1675A98F1E00A74A00B80903 /* SwiftyCamViewController.swift in Sources */,
|
||||
168505EA1E288D80005B4537 /* PhotoViewController.swift in Sources */,
|
||||
16298B561E2703DC0056D413 /* SwiftyRecordButton.swift in Sources */,
|
||||
165CDA841E68802500FD0343 /* UIImage+Extension.swift in Sources */,
|
||||
1675A98D1E00A74A00B80903 /* PreviewView.swift in Sources */,
|
||||
1675A98E1E00A74A00B80903 /* SwiftyCamButton.swift in Sources */,
|
||||
);
|
||||
|
|
@ -301,9 +297,9 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
DEVELOPMENT_TEAM = LW28KCU8N5;
|
||||
DEVELOPMENT_TEAM = 427VB57543;
|
||||
INFOPLIST_FILE = DemoSwiftyCam/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.Cappsule.DemoSwiftyCam;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
|
|
@ -315,9 +311,9 @@
|
|||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
DEVELOPMENT_TEAM = LW28KCU8N5;
|
||||
DEVELOPMENT_TEAM = 427VB57543;
|
||||
INFOPLIST_FILE = DemoSwiftyCam/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.Cappsule.DemoSwiftyCam;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
|
|
|
|||
|
|
@ -2,10 +2,6 @@
|
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>To record audio with videos</string>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
<string>To take photos and videos</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
|
|
@ -24,6 +20,10 @@
|
|||
<string>1</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSCameraUsageDescription</key>
|
||||
<string>To take photos and videos</string>
|
||||
<key>NSMicrophoneUsageDescription</key>
|
||||
<string>To record audio with videos</string>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
|
|
@ -35,8 +35,6 @@
|
|||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
|
|
@ -1,50 +1,51 @@
|
|||
/*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:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
|
||||
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
|
||||
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
|
||||
|
||||
import UIKit
|
||||
|
||||
class PhotoViewController: UIViewController {
|
||||
|
||||
override var prefersStatusBarHidden: Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
private var backgroundImage: UIImage
|
||||
|
||||
init(image: UIImage) {
|
||||
self.backgroundImage = image
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
}
|
||||
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
self.view.backgroundColor = UIColor.gray
|
||||
let backgroundImageView = UIImageView(frame: view.frame)
|
||||
backgroundImageView.image = backgroundImage
|
||||
view.addSubview(backgroundImageView)
|
||||
let cancelButton = UIButton(frame: CGRect(x: 10.0, y: 10.0, width: 30.0, height: 30.0))
|
||||
cancelButton.setImage(#imageLiteral(resourceName: "cancel"), for: UIControlState())
|
||||
cancelButton.addTarget(self, action: #selector(cancel), for: .touchUpInside)
|
||||
view.addSubview(cancelButton)
|
||||
}
|
||||
|
||||
func cancel() {
|
||||
dismiss(animated: true, completion: nil)
|
||||
}
|
||||
override var prefersStatusBarHidden: Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
private var backgroundImage: UIImage
|
||||
|
||||
init(image: UIImage) {
|
||||
self.backgroundImage = image
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
}
|
||||
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
self.view.backgroundColor = UIColor.gray
|
||||
let backgroundImageView = UIImageView(frame: view.frame)
|
||||
backgroundImageView.contentMode = UIViewContentMode.scaleAspectFit
|
||||
backgroundImageView.image = backgroundImage
|
||||
view.addSubview(backgroundImageView)
|
||||
let cancelButton = UIButton(frame: CGRect(x: 10.0, y: 10.0, width: 30.0, height: 30.0))
|
||||
cancelButton.setImage(#imageLiteral(resourceName: "cancel"), for: UIControlState())
|
||||
cancelButton.addTarget(self, action: #selector(cancel), for: .touchUpInside)
|
||||
view.addSubview(cancelButton)
|
||||
}
|
||||
|
||||
func cancel() {
|
||||
dismiss(animated: true, completion: nil)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,96 +0,0 @@
|
|||
//
|
||||
// UIImage+Extension.swift
|
||||
// DemoSwiftyCam
|
||||
//
|
||||
// Created by Andrew on 2017-03-02.
|
||||
// Copyright © 2017 Cappsule. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
extension UIImage {
|
||||
func fixOrientation() -> UIImage? {
|
||||
|
||||
guard let cgImage = self.cgImage else {
|
||||
return nil
|
||||
}
|
||||
|
||||
if self.imageOrientation == UIImageOrientation.up {
|
||||
return self
|
||||
}
|
||||
|
||||
let width = self.size.width
|
||||
let height = self.size.height
|
||||
|
||||
var transform = CGAffineTransform.identity
|
||||
|
||||
switch self.imageOrientation {
|
||||
case .down, .downMirrored:
|
||||
transform = transform.translatedBy(x: width, y: height)
|
||||
transform = transform.rotated(by: CGFloat.pi)
|
||||
|
||||
case .left, .leftMirrored:
|
||||
transform = transform.translatedBy(x: width, y: 0)
|
||||
transform = transform.rotated(by: 0.5*CGFloat.pi)
|
||||
|
||||
case .right, .rightMirrored:
|
||||
transform = transform.translatedBy(x: 0, y: height)
|
||||
transform = transform.rotated(by: -0.5*CGFloat.pi)
|
||||
|
||||
case .up, .upMirrored:
|
||||
break
|
||||
}
|
||||
|
||||
switch self.imageOrientation {
|
||||
case .upMirrored, .downMirrored:
|
||||
transform = transform.translatedBy(x: width, y: 0)
|
||||
transform = transform.scaledBy(x: -1, y: 1)
|
||||
|
||||
case .leftMirrored, .rightMirrored:
|
||||
transform = transform.translatedBy(x: height, y: 0)
|
||||
transform = transform.scaledBy(x: -1, y: 1)
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Now we draw the underlying CGImage into a new context, applying the transform
|
||||
// calculated above.
|
||||
guard let colorSpace = cgImage.colorSpace else {
|
||||
return nil
|
||||
}
|
||||
|
||||
guard let context = CGContext(
|
||||
data: nil,
|
||||
width: Int(width),
|
||||
height: Int(height),
|
||||
bitsPerComponent: cgImage.bitsPerComponent,
|
||||
bytesPerRow: 0,
|
||||
space: colorSpace,
|
||||
bitmapInfo: UInt32(cgImage.bitmapInfo.rawValue)
|
||||
) else {
|
||||
return nil
|
||||
}
|
||||
|
||||
context.concatenate(transform);
|
||||
|
||||
switch self.imageOrientation {
|
||||
|
||||
case .left, .leftMirrored, .right, .rightMirrored:
|
||||
// Grr...
|
||||
context.draw(cgImage, in: CGRect(x: 0, y: 0, width: height, height: width))
|
||||
|
||||
default:
|
||||
context.draw(cgImage, in: CGRect(x: 0, y: 0, width: width, height: height))
|
||||
}
|
||||
|
||||
// And now we just create a new UIImage from the drawing context
|
||||
guard let newCGImg = context.makeImage() else {
|
||||
return nil
|
||||
}
|
||||
|
||||
let img = UIImage(cgImage: newCGImg)
|
||||
|
||||
return img;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,127 +1,128 @@
|
|||
/*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:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
|
||||
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
|
||||
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
|
||||
|
||||
|
||||
import UIKit
|
||||
|
||||
class ViewController: SwiftyCamViewController, SwiftyCamViewControllerDelegate {
|
||||
|
||||
var flipCameraButton: UIButton!
|
||||
var flashButton: UIButton!
|
||||
var captureButton: SwiftyRecordButton!
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
cameraDelegate = self
|
||||
maximumVideoDuration = 10.0
|
||||
addButtons()
|
||||
}
|
||||
|
||||
override var prefersStatusBarHidden: Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
super.viewDidAppear(animated)
|
||||
}
|
||||
|
||||
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didTake photo: UIImage) {
|
||||
let newVC = PhotoViewController(image: photo)
|
||||
self.present(newVC, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didFinishProcessVideoAt url: URL) {
|
||||
let newVC = VideoViewController(videoURL: url)
|
||||
self.present(newVC, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
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()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didChangeZoomLevel zoom: CGFloat) {
|
||||
print(zoom)
|
||||
}
|
||||
|
||||
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didSwitchCameras camera: SwiftyCamViewController.CameraSelection) {
|
||||
print(camera)
|
||||
}
|
||||
|
||||
@objc private func cameraSwitchAction(_ sender: Any) {
|
||||
switchCamera()
|
||||
}
|
||||
|
||||
@objc private func toggleFlashAction(_ sender: Any) {
|
||||
flashEnabled = !flashEnabled
|
||||
|
||||
if flashEnabled == true {
|
||||
flashButton.setImage(#imageLiteral(resourceName: "flash"), for: UIControlState())
|
||||
} else {
|
||||
flashButton.setImage(#imageLiteral(resourceName: "flashOutline"), for: UIControlState())
|
||||
}
|
||||
}
|
||||
|
||||
private func addButtons() {
|
||||
captureButton = SwiftyRecordButton(frame: CGRect(x: view.frame.midX - 37.5, y: view.frame.height - 100.0, width: 75.0, height: 75.0))
|
||||
self.view.addSubview(captureButton)
|
||||
captureButton.delegate = self
|
||||
|
||||
flipCameraButton = UIButton(frame: CGRect(x: (((view.frame.width / 2 - 37.5) / 2) - 15.0), y: view.frame.height - 74.0, width: 30.0, height: 23.0))
|
||||
flipCameraButton.setImage(#imageLiteral(resourceName: "flipCamera"), for: UIControlState())
|
||||
flipCameraButton.addTarget(self, action: #selector(cameraSwitchAction(_:)), for: .touchUpInside)
|
||||
self.view.addSubview(flipCameraButton)
|
||||
|
||||
let test = CGFloat((view.frame.width - (view.frame.width / 2 + 37.5)) + ((view.frame.width / 2) - 37.5) - 9.0)
|
||||
|
||||
flashButton = UIButton(frame: CGRect(x: test, y: view.frame.height - 77.5, width: 18.0, height: 30.0))
|
||||
flashButton.setImage(#imageLiteral(resourceName: "flashOutline"), for: UIControlState())
|
||||
flashButton.addTarget(self, action: #selector(toggleFlashAction(_:)), for: .touchUpInside)
|
||||
self.view.addSubview(flashButton)
|
||||
}
|
||||
|
||||
var flipCameraButton: UIButton!
|
||||
var flashButton: UIButton!
|
||||
var captureButton: SwiftyRecordButton!
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
cameraDelegate = self
|
||||
maximumVideoDuration = 10.0
|
||||
shouldUseDeviceOrientation = true
|
||||
addButtons()
|
||||
}
|
||||
|
||||
override var prefersStatusBarHidden: Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
super.viewDidAppear(animated)
|
||||
}
|
||||
|
||||
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didTake photo: UIImage) {
|
||||
let newVC = PhotoViewController(image: photo)
|
||||
self.present(newVC, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didFinishProcessVideoAt url: URL) {
|
||||
let newVC = VideoViewController(videoURL: url)
|
||||
self.present(newVC, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
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()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didChangeZoomLevel zoom: CGFloat) {
|
||||
print(zoom)
|
||||
}
|
||||
|
||||
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didSwitchCameras camera: SwiftyCamViewController.CameraSelection) {
|
||||
print(camera)
|
||||
}
|
||||
|
||||
@objc private func cameraSwitchAction(_ sender: Any) {
|
||||
switchCamera()
|
||||
}
|
||||
|
||||
@objc private func toggleFlashAction(_ sender: Any) {
|
||||
flashEnabled = !flashEnabled
|
||||
|
||||
if flashEnabled == true {
|
||||
flashButton.setImage(#imageLiteral(resourceName: "flash"), for: UIControlState())
|
||||
} else {
|
||||
flashButton.setImage(#imageLiteral(resourceName: "flashOutline"), for: UIControlState())
|
||||
}
|
||||
}
|
||||
|
||||
private func addButtons() {
|
||||
captureButton = SwiftyRecordButton(frame: CGRect(x: view.frame.midX - 37.5, y: view.frame.height - 100.0, width: 75.0, height: 75.0))
|
||||
self.view.addSubview(captureButton)
|
||||
captureButton.delegate = self
|
||||
|
||||
flipCameraButton = UIButton(frame: CGRect(x: (((view.frame.width / 2 - 37.5) / 2) - 15.0), y: view.frame.height - 74.0, width: 30.0, height: 23.0))
|
||||
flipCameraButton.setImage(#imageLiteral(resourceName: "flipCamera"), for: UIControlState())
|
||||
flipCameraButton.addTarget(self, action: #selector(cameraSwitchAction(_:)), for: .touchUpInside)
|
||||
self.view.addSubview(flipCameraButton)
|
||||
|
||||
let test = CGFloat((view.frame.width - (view.frame.width / 2 + 37.5)) + ((view.frame.width / 2) - 37.5) - 9.0)
|
||||
|
||||
flashButton = UIButton(frame: CGRect(x: test, y: view.frame.height - 77.5, width: 18.0, height: 30.0))
|
||||
flashButton.setImage(#imageLiteral(resourceName: "flashOutline"), for: UIControlState())
|
||||
flashButton.addTarget(self, action: #selector(toggleFlashAction(_:)), for: .touchUpInside)
|
||||
self.view.addSubview(flashButton)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue