Skip to content

Commit

Permalink
Merge pull request #12 from richardoti/master
Browse files Browse the repository at this point in the history
Transfer branch
  • Loading branch information
richardtop committed Aug 14, 2015
2 parents c6c389a + d9186a6 commit b2f2990
Show file tree
Hide file tree
Showing 9 changed files with 149 additions and 178 deletions.
81 changes: 20 additions & 61 deletions Source/BottomView/BottomContainerView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ protocol BottomContainerViewDelegate {
func pickerButtonDidPress()
func doneButtonDidPress()
func cancelButtonDidPress()
func imageWrapperDidPress()
func stackViewDidPress()
}

class BottomContainerView: UIView {
Expand Down Expand Up @@ -40,13 +40,12 @@ class BottomContainerView: UIView {
return button
}()

lazy var imageWrapper: ImageWrapper = {
let view = ImageWrapper()
lazy var stackView: StackView = {
let view = StackView(frame: CGRect(x: 0, y: 0, width: 80, height: 80))
view.setTranslatesAutoresizingMaskIntoConstraints(false)

return view
}()

lazy var configuration: PickerConfiguration = {
let configuration = PickerConfiguration()
return configuration
Expand Down Expand Up @@ -75,9 +74,9 @@ class BottomContainerView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)

[borderPickerButton, pickerButton, doneButton, imageWrapper, topSeparator].map { self.addSubview($0) }
[borderPickerButton, pickerButton, doneButton, stackView, topSeparator].map { self.addSubview($0) }
backgroundColor = self.configuration.backgroundColor
imageWrapper.addGestureRecognizer(self.tapGestureRecognizer)
stackView.addGestureRecognizer(self.tapGestureRecognizer)

setupConstraints()
}
Expand Down Expand Up @@ -128,19 +127,19 @@ class BottomContainerView: UIView {
relatedBy: .Equal, toItem: self, attribute: .Right,
multiplier: 1, constant: -(UIScreen.mainScreen().bounds.width - (ButtonPicker.Dimensions.buttonBorderSize + UIScreen.mainScreen().bounds.width)/2)/2))

addConstraint(NSLayoutConstraint(item: imageWrapper, attribute: .Width,
addConstraint(NSLayoutConstraint(item: stackView, attribute: .Width,
relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute,
multiplier: 1, constant: ImageWrapper.Dimensions.imageSize))
multiplier: 1, constant: StackView.Dimensions.imageSize))

addConstraint(NSLayoutConstraint(item: imageWrapper, attribute: .Height,
addConstraint(NSLayoutConstraint(item: stackView, attribute: .Height,
relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute,
multiplier: 1, constant: ImageWrapper.Dimensions.imageSize))
multiplier: 1, constant: StackView.Dimensions.imageSize))

addConstraint(NSLayoutConstraint(item: imageWrapper, attribute: .CenterY,
addConstraint(NSLayoutConstraint(item: stackView, attribute: .CenterY,
relatedBy: .Equal, toItem: self, attribute: .CenterY,
multiplier: 1, constant: 0))

addConstraint(NSLayoutConstraint(item: imageWrapper, attribute: .CenterX,
addConstraint(NSLayoutConstraint(item: stackView, attribute: .CenterX,
relatedBy: .Equal, toItem: self, attribute: .Left,
multiplier: 1, constant: UIScreen.mainScreen().bounds.width/4 - ButtonPicker.Dimensions.buttonBorderSize/4))

Expand All @@ -165,55 +164,6 @@ class BottomContainerView: UIView {
}
}

func handleTapGestureRecognizer(gesture: UITapGestureRecognizer) {
delegate?.imageWrapperDidPress()
}

// MARK: - Wrapper methods

func updateWrapperImages(array: NSMutableArray) {
switch array.count {
case 1:
imageWrapper.firstImageView.image = array.firstObject as? UIImage
imageWrapper.secondImageView.image = nil
imageWrapper.secondImageView.alpha = 0
if pastCount < 1 {
animateImageView(imageWrapper.firstImageView)
}
case 0:
imageWrapper.firstImageView.image = nil
case 2:
imageWrapper.firstImageView.image = array[1] as? UIImage
imageWrapper.secondImageView.image = array.firstObject as? UIImage
imageWrapper.secondImageView.alpha = 1
imageWrapper.thirdImageView.alpha = 0
if pastCount < 2 {
animateImageView(imageWrapper.secondImageView)
}
case 3:
imageWrapper.firstImageView.image = array[2] as? UIImage
imageWrapper.secondImageView.image = array[1] as? UIImage
imageWrapper.thirdImageView.image = array.firstObject as? UIImage
imageWrapper.thirdImageView.alpha = 1
imageWrapper.fourthImageView.alpha = 0
if pastCount < 3 {
animateImageView(imageWrapper.thirdImageView)
}
default:
imageWrapper.fourthImageView.alpha = 1
imageWrapper.firstImageView.image = array.lastObject as? UIImage
imageWrapper.secondImageView.image = array[array.count - 2] as? UIImage
imageWrapper.thirdImageView.image = array[array.count - 3] as? UIImage
imageWrapper.fourthImageView.image = array[array.count - 4] as? UIImage
if pastCount < array.count {
animateImageView(imageWrapper.fourthImageView)
}
}

pastCount = array.count
pickerButton.photoNumber = array.count
}

private func animateImageView(imageView: UIImageView) {
imageView.transform = CGAffineTransformMakeScale(0, 0)

Expand All @@ -235,3 +185,12 @@ extension BottomContainerView: ButtonPickerDelegate {
delegate?.pickerButtonDidPress()
}
}

// MARK: - StackViewDelegate methods

extension BottomContainerView: StackViewDelegate {

func stackViewDidPress() {
delegate?.stackViewDidPress()
}
}
28 changes: 28 additions & 0 deletions Source/BottomView/ImageStack.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import UIKit

protocol ImageStackDelegate {
func imageDidPush(image: UIImage)
func imageStackDidDrop(image: UIImage)
}

struct ImageStack {

static var sharedStack = ImageStack()

var images: [UIImage] = [UIImage]()
var delegate: ImageStackDelegate?

mutating func pushImage(image: UIImage) {
images.append(image)
delegate?.imageDidPush(image)
}

mutating func dropImage(image: UIImage) {
images = images.filter() {$0 != image}
delegate?.imageStackDidDrop(image)
}

func containsImage(image: UIImage) -> Bool {
return contains(images, image)
}
}
105 changes: 0 additions & 105 deletions Source/BottomView/ImageWrapper.swift

This file was deleted.

89 changes: 89 additions & 0 deletions Source/BottomView/StackView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import UIKit

protocol StackViewDelegate {
func stackViewDidPress()
}

class StackView: UIView {

struct Dimensions {
static let imageSize: CGFloat = 52
}

var delegate: StackViewDelegate?

var views: [UIImageView] = {
var array = [UIImageView]()
for i in 0...3 {
let view = UIImageView()
view.layer.cornerRadius = 3
view.layer.borderColor = UIColor(white: 1, alpha: 0.2).CGColor
view.layer.borderWidth = 1
view.contentMode = .ScaleAspectFill
view.clipsToBounds = true
array.append(view)
}
return array
}()

lazy var tapGestureRecognizer: UITapGestureRecognizer = {
let gesture = UITapGestureRecognizer()
gesture.addTarget(self, action: "handleTapGestureRecognizer:")

return gesture
}()

lazy var viewSize: CGSize = CGSize(width: self.frame.width * 0.6, height: self.frame.height * 0.6)

override init(frame: CGRect) {
super.init(frame: frame)
views.map{ self.addSubview($0) }
self.addGestureRecognizer(tapGestureRecognizer)
layoutSubviews()
ImageStack.sharedStack.delegate = self
renderViews()
}

override func layoutSubviews() {
let step = -4
for (i, view) in enumerate(views) {
var side = i * step
var frame = CGRect(origin: CGPoint(x: side, y: side), size: viewSize)
view.frame = frame
}
}

func handleTapGestureRecognizer(gesture: UITapGestureRecognizer) {
delegate?.stackViewDidPress()
}

required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

extension StackView: ImageStackDelegate {
func imageDidPush(image: UIImage) {
renderViews()
}

func imageStackDidDrop(image: UIImage) {
renderViews()
}

func renderViews() {
let photos = ImageStack.sharedStack.images
//TODO: Find better way to limit value to bounds
var size = min(photos.count - 1, 3)

for (index, view) in enumerate(views.reverse()) {
if index <= size {
view.image = photos.reverse()[index]
view.alpha = 1
} else {
view.image = nil
view.alpha = 0
}
}
}
}
1 change: 1 addition & 0 deletions Source/CameraView/CameraView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ class CameraView: UIViewController {
self.stillImageOutput!.captureStillImageAsynchronouslyFromConnection(self.stillImageOutput!.connectionWithMediaType(AVMediaTypeVideo), completionHandler: { (buffer, error) -> Void in
let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer)
let image = UIImage(data: imageData)
ImageStack.sharedStack.pushImage(image!)
self.delegate?.imageToLibrary(image!)
let orientation = ALAssetOrientation(rawValue: image!.imageOrientation.rawValue)
let assetsLibrary = ALAssetsLibrary()
Expand Down
6 changes: 3 additions & 3 deletions Source/ImageGallery/ImageGalleryView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -259,18 +259,18 @@ extension ImageGalleryView: UICollectionViewDelegate {

if cell.selectedImageView.image != nil {
UIView.animateWithDuration(0.2, animations: { [unowned self] in
cell.selectedImageView.transform = CGAffineTransformMakeScale(0, 0)
cell.selectedImageView.transform = CGAffineTransformMakeScale(0.1, 0.1)
}, completion: { _ in
cell.selectedImageView.image = nil
})
selectedImages.removeObject(image)
ImageStack.sharedStack.dropImage(image)
} else {
cell.selectedImageView.image = getImage("selectedImageGallery")
cell.selectedImageView.transform = CGAffineTransformMakeScale(0, 0)
UIView.animateWithDuration(0.2, animations: { _ in
cell.selectedImageView.transform = CGAffineTransformIdentity
})
selectedImages.insertObject(image, atIndex: 0)
ImageStack.sharedStack.pushImage(image)
}

delegate?.imageSelected(selectedImages)
Expand Down
2 changes: 1 addition & 1 deletion Source/ImageGallery/ImageGalleryViewDataSource.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ extension ImageGalleryView: UICollectionViewDataSource {
shouldTransform = false
}

if selectedImages.containsObject(image) {
if ImageStack.sharedStack.containsImage(image) {
cell.selectedImageView.image = getImage("selectedImageGallery")
cell.selectedImageView.alpha = 1
cell.selectedImageView.transform = CGAffineTransformIdentity
Expand Down
Loading

0 comments on commit b2f2990

Please sign in to comment.