mirror of
https://bitbucket.org/vendoo/vendoo_v1.0.git
synced 2025-12-25 19:57:41 +00:00
253 lines
7.4 KiB
Swift
253 lines
7.4 KiB
Swift
// The MIT License (MIT)
|
|
//
|
|
// Copyright (c) 2015 Joakim Gyllström
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in all
|
|
// copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
// SOFTWARE.
|
|
|
|
import UIKit
|
|
import Photos
|
|
|
|
/**
|
|
BSImagePickerViewController.
|
|
Use settings or buttons to customize it to your needs.
|
|
*/
|
|
public class BSImagePickerViewController : UINavigationController {
|
|
/**
|
|
Object that keeps settings for the picker.
|
|
*/
|
|
public var settings: BSImagePickerSettings = Settings()
|
|
|
|
/**
|
|
Done button.
|
|
*/
|
|
public var doneButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Done, target: nil, action: nil)
|
|
|
|
/**
|
|
Cancel button
|
|
*/
|
|
public var cancelButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Cancel, target: nil, action: nil)
|
|
|
|
/**
|
|
Default selections
|
|
*/
|
|
public var defaultSelections: PHFetchResult?
|
|
|
|
/**
|
|
Fetch results.
|
|
*/
|
|
public lazy var fetchResults: [PHFetchResult] = {
|
|
let fetchOptions = PHFetchOptions()
|
|
|
|
// Camera roll fetch result
|
|
let cameraRollResult = PHAssetCollection.fetchAssetCollectionsWithType(.SmartAlbum, subtype: .SmartAlbumUserLibrary, options: fetchOptions)
|
|
|
|
// Albums fetch result
|
|
let albumResult = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions)
|
|
|
|
return [cameraRollResult, albumResult]
|
|
}()
|
|
|
|
var albumTitleView: AlbumTitleView = bundle.loadNibNamed("AlbumTitleView", owner: nil, options: nil).first as! AlbumTitleView
|
|
|
|
static let bundle: NSBundle = NSBundle(path: NSBundle(forClass: PhotosViewController.self).pathForResource("BSImagePicker", ofType: "bundle")!)!
|
|
|
|
lazy var photosViewController: PhotosViewController = {
|
|
let vc = PhotosViewController(fetchResults: self.fetchResults,
|
|
defaultSelections: self.defaultSelections,
|
|
settings: self.settings)
|
|
|
|
vc.doneBarButton = self.doneButton
|
|
vc.cancelBarButton = self.cancelButton
|
|
vc.albumTitleView = self.albumTitleView
|
|
|
|
return vc
|
|
}()
|
|
|
|
class func authorize(status: PHAuthorizationStatus = PHPhotoLibrary.authorizationStatus(), fromViewController: UIViewController, completion: (authorized: Bool) -> Void) {
|
|
switch status {
|
|
case .Authorized:
|
|
// We are authorized. Run block
|
|
completion(authorized: true)
|
|
case .NotDetermined:
|
|
// Ask user for permission
|
|
PHPhotoLibrary.requestAuthorization({ (status) -> Void in
|
|
dispatch_async(dispatch_get_main_queue(), { () -> Void in
|
|
self.authorize(status, fromViewController: fromViewController, completion: completion)
|
|
})
|
|
})
|
|
default: ()
|
|
dispatch_async(dispatch_get_main_queue(), { () -> Void in
|
|
completion(authorized: false)
|
|
})
|
|
}
|
|
}
|
|
|
|
/**
|
|
Sets up an classic image picker with results from camera roll and albums
|
|
*/
|
|
public init() {
|
|
super.init(nibName: nil, bundle: nil)
|
|
}
|
|
|
|
/**
|
|
https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
*/
|
|
required public init?(coder aDecoder: NSCoder) {
|
|
super.init(coder: aDecoder)
|
|
}
|
|
|
|
/**
|
|
Load view. See apple documentation
|
|
*/
|
|
public override func loadView() {
|
|
super.loadView()
|
|
|
|
// TODO: Settings
|
|
view.backgroundColor = UIColor.whiteColor()
|
|
|
|
// Make sure we really are authorized
|
|
if PHPhotoLibrary.authorizationStatus() == .Authorized {
|
|
setViewControllers([photosViewController], animated: false)
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: ImagePickerSettings proxy
|
|
extension BSImagePickerViewController: BSImagePickerSettings {
|
|
/**
|
|
See BSImagePicketSettings for documentation
|
|
*/
|
|
public var maxNumberOfSelections: Int {
|
|
get {
|
|
return settings.maxNumberOfSelections
|
|
}
|
|
set {
|
|
settings.maxNumberOfSelections = newValue
|
|
}
|
|
}
|
|
|
|
/**
|
|
See BSImagePicketSettings for documentation
|
|
*/
|
|
public var selectionCharacter: Character? {
|
|
get {
|
|
return settings.selectionCharacter
|
|
}
|
|
set {
|
|
settings.selectionCharacter = newValue
|
|
}
|
|
}
|
|
|
|
/**
|
|
See BSImagePicketSettings for documentation
|
|
*/
|
|
public var selectionFillColor: UIColor {
|
|
get {
|
|
return settings.selectionFillColor
|
|
}
|
|
set {
|
|
settings.selectionFillColor = newValue
|
|
}
|
|
}
|
|
|
|
/**
|
|
See BSImagePicketSettings for documentation
|
|
*/
|
|
public var selectionStrokeColor: UIColor {
|
|
get {
|
|
return settings.selectionStrokeColor
|
|
}
|
|
set {
|
|
settings.selectionStrokeColor = newValue
|
|
}
|
|
}
|
|
|
|
/**
|
|
See BSImagePicketSettings for documentation
|
|
*/
|
|
public var selectionShadowColor: UIColor {
|
|
get {
|
|
return settings.selectionShadowColor
|
|
}
|
|
set {
|
|
settings.selectionShadowColor = newValue
|
|
}
|
|
}
|
|
|
|
/**
|
|
See BSImagePicketSettings for documentation
|
|
*/
|
|
public var selectionTextAttributes: [String: AnyObject] {
|
|
get {
|
|
return settings.selectionTextAttributes
|
|
}
|
|
set {
|
|
settings.selectionTextAttributes = newValue
|
|
}
|
|
}
|
|
|
|
/**
|
|
See BSImagePicketSettings for documentation
|
|
*/
|
|
public var cellsPerRow: (verticalSize: UIUserInterfaceSizeClass, horizontalSize: UIUserInterfaceSizeClass) -> Int {
|
|
get {
|
|
return settings.cellsPerRow
|
|
}
|
|
set {
|
|
settings.cellsPerRow = newValue
|
|
}
|
|
}
|
|
|
|
/**
|
|
See BSImagePicketSettings for documentation
|
|
*/
|
|
public var takePhotos: Bool {
|
|
get {
|
|
return settings.takePhotos
|
|
}
|
|
set {
|
|
settings.takePhotos = newValue
|
|
}
|
|
}
|
|
|
|
public var takePhotoIcon: UIImage? {
|
|
get {
|
|
return settings.takePhotoIcon
|
|
}
|
|
set {
|
|
settings.takePhotoIcon = newValue
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: Album button
|
|
extension BSImagePickerViewController {
|
|
/**
|
|
Album button in title view
|
|
*/
|
|
public var albumButton: UIButton {
|
|
get {
|
|
return albumTitleView.albumButton
|
|
}
|
|
set {
|
|
albumTitleView.albumButton = newValue
|
|
}
|
|
}
|
|
}
|