Skip to content
This repository has been archived by the owner on Feb 8, 2023. It is now read-only.

Commit

Permalink
add high quality image size and fix cell select bug
Browse files Browse the repository at this point in the history
  • Loading branch information
StormXX committed Mar 1, 2016
1 parent 5c895a2 commit ebc6750
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 20 deletions.
Binary file not shown.
28 changes: 15 additions & 13 deletions PhotoPicker/PhotoPicker/AssetCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,21 @@ class AssetCell: UICollectionViewCell {
@IBOutlet weak var checkMarkImageView: UIImageView!

override var selected: Bool {
didSet {
checkMarkImageView.image = selected ? UIImage(named: selectedCheckMarkImageName, inBundle: currentBundle, compatibleWithTraitCollection: nil) : UIImage(named: unselectedCheckMarkImageName, inBundle: currentBundle, compatibleWithTraitCollection: nil)
if selected {
UIView.animateKeyframesWithDuration(0.33, delay: 0.0, options: [], animations: { () -> Void in
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: { [unowned self]() -> Void in
let transform = CGAffineTransformMakeScale(1.3, 1.3)
self.checkMarkImageView.transform = transform
})

UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.5, animations: { [unowned self]() -> Void in
self.checkMarkImageView.transform = CGAffineTransformIdentity
})
}, completion: nil)
willSet {
checkMarkImageView.image = newValue ? UIImage(named: selectedCheckMarkImageName, inBundle: currentBundle, compatibleWithTraitCollection: nil) : UIImage(named: unselectedCheckMarkImageName, inBundle: currentBundle, compatibleWithTraitCollection: nil)
if !selected && newValue {
if newValue {
UIView.animateKeyframesWithDuration(0.33, delay: 0.0, options: [], animations: { () -> Void in
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: { [unowned self]() -> Void in
let transform = CGAffineTransformMakeScale(1.3, 1.3)
self.checkMarkImageView.transform = transform
})

UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.5, animations: { [unowned self]() -> Void in
self.checkMarkImageView.transform = CGAffineTransformIdentity
})
}, completion: nil)
}
}
}
}
Expand Down
24 changes: 22 additions & 2 deletions PhotoPicker/PhotoPicker/AssetsViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ class AssetsViewController: UICollectionViewController {

//MARK: - public property
var photoPickerController: PhotoPickerController!
var selectedAssets: [PHAsset] = []
var selectedAssets: [PHAsset] = [] {
didSet {
updateHighQualityImageSize()
}
}

var assetCollection: PHAssetCollection! {
didSet {
Expand Down Expand Up @@ -137,7 +141,7 @@ class AssetsViewController: UICollectionViewController {
selectedAssets.append(asset)
lastSelectItemIndexPath = indexPath
} else {
photoPickerController.delegate?.photoPickerController(photoPickerController, didFinishPickingAssets: [asset], needHighQualityImage: true)
photoPickerController.delegate?.photoPickerController(photoPickerController, didFinishPickingAssets: [asset], needHighQualityImage: toolbarHighQualityButton.checked)
}

updateToolBar()
Expand Down Expand Up @@ -193,6 +197,7 @@ extension AssetsViewController {
guard photoPickerController.allowMultipleSelection else { return }
toolbarNumberView = ToolBarNumberView(frame: CGRect(origin: CGPointZero, size: CGSize(width: 21.0, height: 21.0)))
toolbarHighQualityButton = ToolBarHighQualityButton(frame: CGRect(origin: CGPointZero, size: CGSize(width: 150, height: 21.0)))
toolbarHighQualityButton.assetsViewController = self

sendBarItem = UIBarButtonItem(title: "Send", style: .Plain, target: self, action: "sendButtonTapped")
sendBarItem.enabled = false
Expand All @@ -210,6 +215,21 @@ extension AssetsViewController {
sendBarItem.enabled = (selectedAssets.count != 0)
toolbarNumberView.number = selectedAssets.count
}

func updateHighQualityImageSize() {
guard toolbarHighQualityButton.checked else { return }
var size: Int = 0
selectedAssets.forEach { (asset) -> () in
let options = PHImageRequestOptions()
options.synchronous = true
PHImageManager.defaultManager().requestImageDataForAsset(asset, options: options, resultHandler: { (imageData, dataUTI, orientation, info) -> Void in
if let data = imageData {
size += data.length
}
})
}
self.toolbarHighQualityButton.highqualityImageSize = size
}
}

//MARK: - collection view help method
Expand Down
9 changes: 4 additions & 5 deletions PhotoPicker/PhotoPicker/PhotoPickerProtocol.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,23 @@ public protocol PhotoPickerDelegate: class {
}

public extension PhotoPickerDelegate {
func photoPickerController(controller: PhotoPickerController, didFinishPickingAssets: [PHAsset], needHighQualityImage: Bool) {
func photoPickerController(controller: PhotoPickerController, didFinishPickingAssets assets: [PHAsset], needHighQualityImage: Bool) {
return
}

func photoPickerControllerDidCancel(controller: PhotoPickerController) {
return
}

func photoPickerController(controller: PhotoPickerController, shouldSelectAsset: PHAsset) -> Bool {
func photoPickerController(controller: PhotoPickerController, shouldSelectAsset asset: PHAsset) -> Bool {
return true
}


func photoPickerController(controller: PhotoPickerController, didSelectAsset: PHAsset) {
func photoPickerController(controller: PhotoPickerController, didSelectAsset asset: PHAsset) {
return
}

func photoPickerController(controller: PhotoPickerController, didDeselectAsset: PHAsset) {
func photoPickerController(controller: PhotoPickerController, didDeselectAsset asset: PHAsset) {
return
}
}
20 changes: 20 additions & 0 deletions PhotoPicker/PhotoPicker/ToolBarHighQualityButton.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,35 @@ import UIKit
let imageViewWidth: CGFloat = 18
class ToolBarHighQualityButton: UIView {

weak var assetsViewController: AssetsViewController!

//MARK: - public property
var checked: Bool = false {
didSet {
if checked {
imageView.image = UIImage(named: toolbarHighQualityImageCheckedImageName, inBundle: currentBundle, compatibleWithTraitCollection: nil)
titleLabel.textColor = blueTextColor
assetsViewController.updateHighQualityImageSize()
} else {
imageView.image = UIImage(named: toolbarHighQualityImageUnCheckedImageName, inBundle: currentBundle, compatibleWithTraitCollection: nil)
titleLabel.textColor = greyTextColor
highqualityImageSize = 0
}
}
}

var highqualityImageSize: Int = 0 {
didSet {
if highqualityImageSize == 0 {
titleLabel.text = "Origin"
} else {
let kb: Float = Float(highqualityImageSize) / 1024.0
if kb > 1024.0 {
let mb: Float = kb / 1024.0
titleLabel.text = "Origin(\(String(format: "%.2f", mb))M)"
} else {
titleLabel.text = "Origin(\(String(format: "%.2f", kb))K)"
}
}
}
}
Expand Down

0 comments on commit ebc6750

Please sign in to comment.