From dac1bba0cb9de1363baf8fdf2cb4d255fdec5ea2 Mon Sep 17 00:00:00 2001 From: haranicle Date: Sat, 1 Jul 2017 15:02:21 +0900 Subject: [PATCH] swiftlint autocorrect --- .swiftlint.yml | 47 +++++++++++ Demo/AppDelegate.swift | 1 - Demo/DemoListViewController.swift | 56 ++++++------- NohanaImagePicker/ActivityIndicatable.swift | 2 +- .../AlbumListEmptyIndicator.swift | 12 +-- .../AlbumListViewController.swift | 78 +++++++++---------- .../AnimatableNavigationController.swift | 16 ++-- NohanaImagePicker/AssetCell.swift | 14 ++-- NohanaImagePicker/AssetDetailCell.swift | 28 +++---- .../AssetDetailListViewController.swift | 42 +++++----- .../AssetListViewController.swift | 52 ++++++------- .../ContractingAnimationController.swift | 24 +++--- NohanaImagePicker/EmptyIndicatable.swift | 2 +- .../ExpandingAnimationController.swift | 19 +++-- NohanaImagePicker/ItemList.swift | 6 +- NohanaImagePicker/MomentCell.swift | 2 +- NohanaImagePicker/MomentViewController.swift | 50 ++++++------ .../NohanaImagePickerController.swift | 28 +++---- NohanaImagePicker/PhotoKitAlbumList.swift | 34 ++++---- NohanaImagePicker/PhotoKitAsset.swift | 18 ++--- NohanaImagePicker/PhotoKitAssetList.swift | 26 +++---- NohanaImagePicker/PickedAssetList.swift | 39 +++++----- NohanaImagePicker/Size.swift | 10 +-- .../SwipeInteractionController.swift | 4 +- 24 files changed, 326 insertions(+), 284 deletions(-) create mode 100644 .swiftlint.yml diff --git a/.swiftlint.yml b/.swiftlint.yml new file mode 100644 index 0000000..a643fe9 --- /dev/null +++ b/.swiftlint.yml @@ -0,0 +1,47 @@ +disabled_rules: # rule identifiers to exclude from running + - todo +# - colon +# - comma +# - control_statement + - file_length + - force_cast + - force_try + - function_body_length +# - leading_whitespace + - line_length + - legacy_constructor + - nesting +# - opening_brace +# - operator_whitespace +# - return_arrow_whitespace +# - statement_position +# - todo +# - trailing_newline +# - trailing_semicolon +# - trailing_whitespace + - type_body_length + - type_name + - variable_name_max_length + - variable_name_min_length + - variable_name + - valid_docs + - function_parameter_count + - cyclomatic_complexity +excluded: # paths to ignore during linting. + - Carthage + - Pods + - .git +# parameterized rules can be customized from this configuration file +line_length: 300 # default 100 +type_body_length: +- 200 # warning default 200 +- 650 # error default 350 +function_body_length: +- 80 # warning default 40 +- 250 # error default 100 +file_length: +- 400 # warning default 400 +- 1300 # error default 1000 +variable_name_min_length: +- 1 # warning default 3 +- 0 # error default 2 diff --git a/Demo/AppDelegate.swift b/Demo/AppDelegate.swift index 538e9c8..ecf83c0 100644 --- a/Demo/AppDelegate.swift +++ b/Demo/AppDelegate.swift @@ -51,4 +51,3 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } - diff --git a/Demo/DemoListViewController.swift b/Demo/DemoListViewController.swift index 3c6638f..c1decd4 100644 --- a/Demo/DemoListViewController.swift +++ b/Demo/DemoListViewController.swift @@ -23,7 +23,7 @@ struct Cell { } class DemoListViewController: UITableViewController, NohanaImagePickerControllerDelegate { - + let cells = [ Cell(title: "Default", selector: #selector(DemoListViewController.showDefaultPicker)), Cell(title: "Large thumbnail", selector: #selector(DemoListViewController.showLargeThumbnailPicker)), @@ -31,31 +31,31 @@ class DemoListViewController: UITableViewController, NohanaImagePickerController Cell(title: "Disable to pick assets", selector: #selector(DemoListViewController.showDisableToPickAssetsPicker)), Cell(title: "Custom UI", selector: #selector(DemoListViewController.showCustomUIPicker)), ] - + override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if let indexPathForSelectedRow = tableView.indexPathForSelectedRow { tableView.deselectRow(at: indexPathForSelectedRow, animated: true) } } - + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) } - + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return cells.count } - + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! cell.textLabel?.text = cells[indexPath.row].title return cell } - + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { checkIfAuthorizedToAccessPhotos { isAuthorized in - DispatchQueue.main.async(execute: { + DispatchQueue.main.async(execute: { if isAuthorized { self.perform(self.cells[indexPath.row].selector) } else { @@ -66,13 +66,13 @@ class DemoListViewController: UITableViewController, NohanaImagePickerController }) } } - + // MARK: - Photos - + func checkIfAuthorizedToAccessPhotos(_ handler: @escaping (_ isAuthorized: Bool) -> Void) { switch PHPhotoLibrary.authorizationStatus() { case .notDetermined: - PHPhotoLibrary.requestAuthorization{ status in + PHPhotoLibrary.requestAuthorization { status in switch status { case .authorized: handler(true) @@ -80,7 +80,7 @@ class DemoListViewController: UITableViewController, NohanaImagePickerController handler(false) } } - + case .restricted: handler(false) case .denied: @@ -89,7 +89,7 @@ class DemoListViewController: UITableViewController, NohanaImagePickerController handler(true) } } - + // MARK: - Show NohanaImagePicker @objc @@ -120,12 +120,12 @@ class DemoListViewController: UITableViewController, NohanaImagePickerController func showDisableToPickAssetsPicker() { let picker = NohanaImagePickerController() picker.delegate = self - picker.canPickAsset = { (asset:Asset) -> Bool in + picker.canPickAsset = { (asset: Asset) -> Bool in return asset.identifier % 2 == 0 } present(picker, animated: true, completion: nil) } - + @objc func showCustomUIPicker() { let picker = NohanaImagePickerController() @@ -137,59 +137,59 @@ class DemoListViewController: UITableViewController, NohanaImagePickerController picker.config.image.pickedSmall = UIImage(named: "btn_selected_m") present(picker, animated: true, completion: nil) } - + // MARK: - NohanaImagePickerControllerDelegate - + func nohanaImagePickerDidCancel(_ picker: NohanaImagePickerController) { print("๐ŸทCanceled๐Ÿ™…") picker.dismiss(animated: true, completion: nil) } - - func nohanaImagePicker(_ picker: NohanaImagePickerController, didFinishPickingPhotoKitAssets pickedAssts :[PHAsset]) { + + func nohanaImagePicker(_ picker: NohanaImagePickerController, didFinishPickingPhotoKitAssets pickedAssts: [PHAsset]) { print("๐ŸทCompleted๐Ÿ™†\n\tpickedAssets = \(pickedAssts)") picker.dismiss(animated: true, completion: nil) } - + func nohanaImagePicker(_ picker: NohanaImagePickerController, willPickPhotoKitAsset asset: PHAsset, pickedAssetsCount: Int) -> Bool { print("๐Ÿท\(#function)\n\tasset = \(asset)\n\tpickedAssetsCount = \(pickedAssetsCount)") return true } - + func nohanaImagePicker(_ picker: NohanaImagePickerController, didPickPhotoKitAsset asset: PHAsset, pickedAssetsCount: Int) { print("๐Ÿท\(#function)\n\tasset = \(asset)\n\tpickedAssetsCount = \(pickedAssetsCount)") } - + func nohanaImagePicker(_ picker: NohanaImagePickerController, willDropPhotoKitAsset asset: PHAsset, pickedAssetsCount: Int) -> Bool { print("๐Ÿท\(#function)\n\tasset = \(asset)\n\tpickedAssetsCount = \(pickedAssetsCount)") return true } - + func nohanaImagePicker(_ picker: NohanaImagePickerController, didDropPhotoKitAsset asset: PHAsset, pickedAssetsCount: Int) { print("๐Ÿท\(#function)\n\tasset = \(asset)\n\tpickedAssetsCount = \(pickedAssetsCount)") } - + func nohanaImagePicker(_ picker: NohanaImagePickerController, didSelectPhotoKitAsset asset: PHAsset) { print("๐Ÿท\(#function)\n\tasset = \(asset)\n\t") } - + func nohanaImagePicker(_ picker: NohanaImagePickerController, didSelectPhotoKitAssetList assetList: PHAssetCollection) { print("๐Ÿท\(#function)\n\t\tassetList = \(assetList)\n\t") } - + func nohanaImagePickerDidSelectMoment(_ picker: NohanaImagePickerController) -> Void { print("๐Ÿท\(#function)") } - + func nohanaImagePicker(_ picker: NohanaImagePickerController, assetListViewController: UICollectionViewController, cell: UICollectionViewCell, indexPath: IndexPath, photoKitAsset: PHAsset) -> UICollectionViewCell { print("๐Ÿท\(#function)\n\tindexPath = \(indexPath)\n\tphotoKitAsset = \(photoKitAsset)") return cell } - + func nohanaImagePicker(_ picker: NohanaImagePickerController, assetDetailListViewController: UICollectionViewController, cell: UICollectionViewCell, indexPath: IndexPath, photoKitAsset: PHAsset) -> UICollectionViewCell { print("๐Ÿท\(#function)\n\tindexPath = \(indexPath)\n\tphotoKitAsset = \(photoKitAsset)") return cell } - + func nohanaImagePicker(_ picker: NohanaImagePickerController, assetDetailListViewController: UICollectionViewController, didChangeAssetDetailPage indexPath: IndexPath, photoKitAsset: PHAsset) { print("๐Ÿท\(#function)\n\tindexPath = \(indexPath)") } diff --git a/NohanaImagePicker/ActivityIndicatable.swift b/NohanaImagePicker/ActivityIndicatable.swift index 114acb3..ba30963 100644 --- a/NohanaImagePicker/ActivityIndicatable.swift +++ b/NohanaImagePicker/ActivityIndicatable.swift @@ -20,7 +20,7 @@ public protocol ActivityIndicatable { } public extension ActivityIndicatable where Self: UIViewController { - + func updateVisibilityOfActivityIndicator(_ activityIndicator: UIView) { if isProgressing() { if !view.subviews.contains(activityIndicator) { diff --git a/NohanaImagePicker/AlbumListEmptyIndicator.swift b/NohanaImagePicker/AlbumListEmptyIndicator.swift index 5db4d3f..2f6f934 100644 --- a/NohanaImagePicker/AlbumListEmptyIndicator.swift +++ b/NohanaImagePicker/AlbumListEmptyIndicator.swift @@ -15,32 +15,32 @@ */ class AlbumListEmptyIndicator: UILabel { - + init(message: String, description: String, frame: CGRect, config: NohanaImagePickerController.Config) { super.init(frame: frame) - + let centerStyle = NSMutableParagraphStyle() centerStyle.alignment = NSTextAlignment.center - + let messageAttributes = [ NSForegroundColorAttributeName : config.color.empty ?? UIColor(red: 0x88/0xff, green: 0x88/0xff, blue: 0x88/0xff, alpha: 1), NSFontAttributeName : UIFont.systemFont(ofSize: 26), NSParagraphStyleAttributeName : centerStyle ] let messageText = NSAttributedString(string: message, attributes: messageAttributes) - + let descriptionAttributes = [ NSForegroundColorAttributeName : config.color.empty ?? UIColor(red: 0x88/0xff, green: 0x88/0xff, blue: 0x88/0xff, alpha: 1), NSFontAttributeName : UIFont.systemFont(ofSize: 14), NSParagraphStyleAttributeName : centerStyle ] let descriptionText = NSAttributedString(string: description, attributes: descriptionAttributes) - + let attributedText = NSMutableAttributedString() attributedText.append(messageText) attributedText.append(NSAttributedString(string: "\n\n", attributes: [NSFontAttributeName : UIFont.systemFont(ofSize: 6)])) attributedText.append(descriptionText) - + self.numberOfLines = 0 self.attributedText = attributedText } diff --git a/NohanaImagePicker/AlbumListViewController.swift b/NohanaImagePicker/AlbumListViewController.swift index 35db63b..c1e8ff2 100644 --- a/NohanaImagePicker/AlbumListViewController.swift +++ b/NohanaImagePicker/AlbumListViewController.swift @@ -18,11 +18,11 @@ import UIKit import Photos class AlbumListViewController: UITableViewController, EmptyIndicatable, ActivityIndicatable { - + enum AlbumListViewControllerSectionType: Int { case moment = 0 case albums - + static func count() -> Int { var count: Int = 0 for i in 0.. CGFloat { guard let sectionType = AlbumListViewControllerSectionType(rawValue: indexPath.section) else { fatalError("Invalid section") @@ -97,13 +97,13 @@ class AlbumListViewController: UITableViewController, EmptyIndicatable, Activity return 82 } } - + // MARK: - UITableViewDataSource - + override func numberOfSections(in tableView: UITableView) -> Int { return AlbumListViewControllerSectionType.count() } - + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if let emptyIndicator = emptyIndicator { updateVisibilityOfEmptyIndicator(emptyIndicator) @@ -111,28 +111,28 @@ class AlbumListViewController: UITableViewController, EmptyIndicatable, Activity if let activityIndicator = activityIndicator { updateVisibilityOfActivityIndicator(activityIndicator) } - + guard let sectionType = AlbumListViewControllerSectionType(rawValue: section) else { fatalError("Invalid section") } - + switch sectionType { case .moment: if let nohanaImagePickerController = nohanaImagePickerController { return nohanaImagePickerController.shouldShowMoment ? 1 : 0 } return 0 - + case .albums: return photoKitAlbumList.count } } - + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let sectionType = AlbumListViewControllerSectionType(rawValue: indexPath.section) else { fatalError("Invalid section") } - + switch sectionType { case .moment: guard let cell = tableView.dequeueReusableCell(withIdentifier: "MomentAlbumCell") as? MomentCell else { @@ -172,9 +172,9 @@ class AlbumListViewController: UITableViewController, EmptyIndicatable, Activity return cell } } - + // MARK: - Storyboard - + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let sectionType = AlbumListViewControllerSectionType(rawValue: tableView.indexPathForSelectedRow!.section) else { fatalError("Invalid section") @@ -202,19 +202,19 @@ class AlbumListViewController: UITableViewController, EmptyIndicatable, Activity assetListViewController.nohanaImagePickerController = nohanaImagePickerController } } - + // MARK: - IBAction - + @IBAction func didPushCancel(_ sender: AnyObject) { if let nohanaImagePickerController = nohanaImagePickerController { nohanaImagePickerController.delegate?.nohanaImagePickerDidCancel(nohanaImagePickerController) } } - + // MARK: - EmptyIndicatable - + var emptyIndicator: UIView? - + func setUpEmptyIndicator() { let frame = CGRect(origin: CGPoint.zero, size: Size.screenRectWithoutAppBar(self).size) guard let nohanaImagePickerController = nohanaImagePickerController else { @@ -226,46 +226,46 @@ class AlbumListViewController: UITableViewController, EmptyIndicatable, Activity frame: frame, config: nohanaImagePickerController.config) } - + func isEmpty() -> Bool { if isProgressing() { return false } return photoKitAlbumList.count == 0 } - + // MARK: - ActivityIndicatable - + var activityIndicator: UIActivityIndicatorView? var isLoading = true - + func setUpActivityIndicator() { activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray) let screenRect = Size.screenRectWithoutAppBar(self) activityIndicator?.center = CGPoint(x: screenRect.size.width / 2, y: screenRect.size.height / 2) activityIndicator?.startAnimating() } - + func isProgressing() -> Bool { return isLoading } } extension UIViewController { - + // MARK: - Toolbar - + func setUpToolbarItems() { let leftSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) let rightSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) - + let infoButton = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) infoButton.isEnabled = false infoButton.setTitleTextAttributes([NSFontAttributeName: UIFont.systemFont(ofSize: 14), NSForegroundColorAttributeName: UIColor.black], for: UIControlState()) self.toolbarItems = [leftSpace, infoButton, rightSpace] } - - func setToolbarTitle(_ nohanaImagePickerController:NohanaImagePickerController) { + + func setToolbarTitle(_ nohanaImagePickerController: NohanaImagePickerController) { let count: Int? = toolbarItems?.count guard count != nil && count! >= 2 else { return @@ -284,21 +284,21 @@ extension UIViewController { infoButton.title = title } } - + // MARK: - Notification - + func addPickPhotoKitAssetNotificationObservers() { NotificationCenter.default.addObserver(self, selector: #selector(AlbumListViewController.didPickPhotoKitAsset(_:)), name: NotificationInfo.Asset.PhotoKit.didPick, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(AlbumListViewController.didDropPhotoKitAsset(_:)), name: NotificationInfo.Asset.PhotoKit.didDrop, object: nil) } - + func didPickPhotoKitAsset(_ notification: Notification) { guard let picker = notification.object as? NohanaImagePickerController else { return } setToolbarTitle(picker) } - + func didDropPhotoKitAsset(_ notification: Notification) { guard let picker = notification.object as? NohanaImagePickerController else { return diff --git a/NohanaImagePicker/AnimatableNavigationController.swift b/NohanaImagePicker/AnimatableNavigationController.swift index 304f32b..bad1b0c 100644 --- a/NohanaImagePicker/AnimatableNavigationController.swift +++ b/NohanaImagePicker/AnimatableNavigationController.swift @@ -17,16 +17,16 @@ import UIKit class AnimatableNavigationController: UINavigationController, UINavigationControllerDelegate { - + let swipeInteractionController = SwipeInteractionController() - + required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.delegate = self } - + func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { - + switch operation { case .push where fromVC is AssetListViewController: guard let fromVC = fromVC as? AssetListViewController, @@ -47,11 +47,11 @@ class AnimatableNavigationController: UINavigationController, UINavigationContro return nil } } - - func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { + + func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { swipeInteractionController.attachToViewController(viewController) } - + func navigationController(_ navigationController: UINavigationController, interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? { if animationController is ExpandingAnimationController { return nil @@ -61,5 +61,5 @@ class AnimatableNavigationController: UINavigationController, UINavigationContro } return swipeInteractionController } - + } diff --git a/NohanaImagePicker/AssetCell.swift b/NohanaImagePicker/AssetCell.swift index a0bd715..726747b 100644 --- a/NohanaImagePicker/AssetCell.swift +++ b/NohanaImagePicker/AssetCell.swift @@ -16,25 +16,25 @@ import UIKit class AssetCell: UICollectionViewCell { - + @IBOutlet weak var imageView: UIImageView! @IBOutlet weak var pickButton: UIButton! @IBOutlet weak var overlayView: UIView! - + weak var nohanaImagePickerController: NohanaImagePickerController? var asset: Asset? - + override func willMove(toSuperview newSuperview: UIView?) { super.willMove(toSuperview: newSuperview) if let nohanaImagePickerController = nohanaImagePickerController { let droppedImage: UIImage? = nohanaImagePickerController.config.image.droppedSmall ?? UIImage(named: "btn_select_m", in: nohanaImagePickerController.assetBundle, compatibleWith: nil) let pickedImage: UIImage? = nohanaImagePickerController.config.image.pickedSmall ?? UIImage(named: "btn_selected_m", in: nohanaImagePickerController.assetBundle, compatibleWith: nil) - + pickButton.setImage(droppedImage, for: UIControlState()) pickButton.setImage(pickedImage, for: .selected) } } - + @IBAction func didPushPickButton(_ sender: UIButton) { guard let asset = asset else { return @@ -50,11 +50,11 @@ class AssetCell: UICollectionViewCell { } self.overlayView.isHidden = !pickButton.isSelected } - + func update(asset: Asset, nohanaImagePickerController: NohanaImagePickerController) { self.asset = asset self.nohanaImagePickerController = nohanaImagePickerController - self.pickButton.isSelected = nohanaImagePickerController.pickedAssetList.isPicked(asset) + self.pickButton.isSelected = nohanaImagePickerController.pickedAssetList.isPicked(asset) self.overlayView.isHidden = !pickButton.isSelected self.pickButton.isHidden = !(nohanaImagePickerController.canPickAsset(asset) ) } diff --git a/NohanaImagePicker/AssetDetailCell.swift b/NohanaImagePicker/AssetDetailCell.swift index 884e4bc..48acc54 100644 --- a/NohanaImagePicker/AssetDetailCell.swift +++ b/NohanaImagePicker/AssetDetailCell.swift @@ -17,39 +17,39 @@ import UIKit class AssetDetailCell: UICollectionViewCell, UIScrollViewDelegate { - + @IBOutlet weak var scrollView: UIScrollView! @IBOutlet weak var imageView: UIImageView! - + @IBOutlet weak var imageViewHeightConstraint: NSLayoutConstraint! @IBOutlet weak var imageViewWidthConstraint: NSLayoutConstraint! - let doubleTapGestureRecognizer :UITapGestureRecognizer = UITapGestureRecognizer() - + let doubleTapGestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer() + required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) doubleTapGestureRecognizer.addTarget(self, action: #selector(AssetDetailCell.didDoubleTap(_:))) doubleTapGestureRecognizer.numberOfTapsRequired = 2 } - + override func willMove(toSuperview newSuperview: UIView?) { super.willMove(toSuperview: newSuperview) scrollView.removeGestureRecognizer(doubleTapGestureRecognizer) scrollView.addGestureRecognizer(doubleTapGestureRecognizer) } - + deinit { scrollView.removeGestureRecognizer(doubleTapGestureRecognizer) doubleTapGestureRecognizer.removeTarget(self, action: #selector(AssetDetailCell.didDoubleTap(_:))) } - + // MARK: - UIScrollViewDelegate - + func viewForZooming(in scrollView: UIScrollView) -> UIView? { return imageView } - + // MARK: - Zoom - + func didDoubleTap(_ sender: UITapGestureRecognizer) { if scrollView.zoomScale < scrollView.maximumZoomScale { let center = sender.location(in: imageView) @@ -59,16 +59,16 @@ class AssetDetailCell: UICollectionViewCell, UIScrollViewDelegate { scrollView.setZoomScale(defaultScale, animated: true) } } - + func zoomRect(_ center: CGPoint) -> CGRect { var zoomRect: CGRect = CGRect() zoomRect.size.height = scrollView.frame.size.height / scrollView.maximumZoomScale zoomRect.size.width = scrollView.frame.size.width / scrollView.maximumZoomScale - + zoomRect.origin.x = center.x - zoomRect.size.width / 2.0 zoomRect.origin.y = center.y - zoomRect.size.height / 2.0 - + return zoomRect } - + } diff --git a/NohanaImagePicker/AssetDetailListViewController.swift b/NohanaImagePicker/AssetDetailListViewController.swift index a5c6d72..057af55 100644 --- a/NohanaImagePicker/AssetDetailListViewController.swift +++ b/NohanaImagePicker/AssetDetailListViewController.swift @@ -17,7 +17,7 @@ import UIKit class AssetDetailListViewController: AssetListViewController { - + var currentIndexPath: IndexPath = IndexPath() { willSet { if currentIndexPath != newValue { @@ -25,24 +25,24 @@ class AssetDetailListViewController: AssetListViewController { } } } - + @IBOutlet weak var pickButton: UIButton! - + override var cellSize: CGSize { return Size.screenRectWithoutAppBar(self).size } - + override func viewDidLoad() { super.viewDidLoad() if let nohanaImagePickerController = nohanaImagePickerController { let droppedImage: UIImage? = nohanaImagePickerController.config.image.droppedLarge ?? UIImage(named: "btn_select_l", in: nohanaImagePickerController.assetBundle, compatibleWith: nil) let pickedImage: UIImage? = nohanaImagePickerController.config.image.pickedLarge ?? UIImage(named: "btn_selected_l", in: nohanaImagePickerController.assetBundle, compatibleWith: nil) - + pickButton.setImage(droppedImage, for: UIControlState()) pickButton.setImage(pickedImage, for: .selected) } } - + override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) let indexPath = currentIndexPath @@ -54,12 +54,12 @@ class AssetDetailListViewController: AssetListViewController { self.view.isHidden = false } } - + override func updateTitle() { self.title = "" } - - func didChangeAssetDetailPage(_ indexPath:IndexPath) { + + func didChangeAssetDetailPage(_ indexPath: IndexPath) { guard let nohanaImagePickerController = nohanaImagePickerController else { return } @@ -68,7 +68,7 @@ class AssetDetailListViewController: AssetListViewController { pickButton.isHidden = !(nohanaImagePickerController.canPickAsset(asset) ) nohanaImagePickerController.delegate?.nohanaImagePicker?(nohanaImagePickerController, assetDetailListViewController: self, didChangeAssetDetailPage: indexPath, photoKitAsset: asset.originalAsset) } - + override func scrollCollectionView(to indexPath: IndexPath) { let count: Int? = photoKitAssetList?.count guard count != nil && count! > 0 else { @@ -79,7 +79,7 @@ class AssetDetailListViewController: AssetListViewController { self.collectionView?.scrollToItem(at: toIndexPath, at: UICollectionViewScrollPosition.centeredHorizontally, animated: false) } } - + override func scrollCollectionViewToInitialPosition() { guard isFirstAppearance else { return @@ -88,9 +88,9 @@ class AssetDetailListViewController: AssetListViewController { scrollCollectionView(to: indexPath) isFirstAppearance = false } - + // MARK: - IBAction - + @IBAction func didPushPickButton(_ sender: UIButton) { let asset = photoKitAssetList[currentIndexPath.row] if pickButton.isSelected { @@ -103,9 +103,9 @@ class AssetDetailListViewController: AssetListViewController { } } } - + // MARK: - UICollectionViewDelegate - + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AssetDetailCell", for: indexPath) as? AssetDetailCell, let nohanaImagePickerController = nohanaImagePickerController else { @@ -113,7 +113,7 @@ class AssetDetailListViewController: AssetListViewController { } cell.scrollView.zoomScale = 1 cell.tag = indexPath.item - + let imageSize = CGSize( width: cellSize.width * UIScreen.main.scale, height: cellSize.height * UIScreen.main.scale @@ -132,9 +132,9 @@ class AssetDetailListViewController: AssetListViewController { } return (nohanaImagePickerController.delegate?.nohanaImagePicker?(nohanaImagePickerController, assetDetailListViewController: self, cell: cell, indexPath: indexPath, photoKitAsset: asset.originalAsset)) ?? cell } - + // MARK: - UIScrollViewDelegate - + override func scrollViewDidScroll(_ scrollView: UIScrollView) { guard let collectionView = collectionView else { return @@ -148,11 +148,11 @@ class AssetDetailListViewController: AssetListViewController { currentIndexPath = IndexPath(row: row, section: currentIndexPath.section) } } - + // MARK: - UICollectionViewDelegateFlowLayout - + override func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize { return cellSize } - + } diff --git a/NohanaImagePicker/AssetListViewController.swift b/NohanaImagePicker/AssetListViewController.swift index d9d9a5d..74dec63 100644 --- a/NohanaImagePicker/AssetListViewController.swift +++ b/NohanaImagePicker/AssetListViewController.swift @@ -18,10 +18,10 @@ import UIKit import Photos class AssetListViewController: UICollectionViewController { - + weak var nohanaImagePickerController: NohanaImagePickerController? var photoKitAssetList: PhotoKitAssetList! - + override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = nohanaImagePickerController?.config.color.background ?? .white @@ -29,7 +29,7 @@ class AssetListViewController: UICollectionViewController { setUpToolbarItems() addPickPhotoKitAssetNotificationObservers() } - + var cellSize: CGSize { guard let nohanaImagePickerController = nohanaImagePickerController else { return CGSize.zero @@ -38,15 +38,15 @@ class AssetListViewController: UICollectionViewController { if UIInterfaceOrientationIsPortrait(UIApplication.shared.statusBarOrientation) { numberOfColumns = nohanaImagePickerController.numberOfColumnsInPortrait } - let cellMargin:CGFloat = 2 + let cellMargin: CGFloat = 2 let cellWidth = (view.frame.width - cellMargin * (CGFloat(numberOfColumns) - 1)) / CGFloat(numberOfColumns) return CGSize(width: cellWidth, height: cellWidth) } - + deinit { NotificationCenter.default.removeObserver(self) } - + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) if let nohanaImagePickerController = nohanaImagePickerController { @@ -55,7 +55,7 @@ class AssetListViewController: UICollectionViewController { collectionView?.reloadData() scrollCollectionViewToInitialPosition() } - + override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) view.isHidden = true @@ -69,13 +69,13 @@ class AssetListViewController: UICollectionViewController { self.view.isHidden = false } } - + var isFirstAppearance = true - + func updateTitle() { title = photoKitAssetList.title } - + func scrollCollectionView(to indexPath: IndexPath) { let count: Int? = photoKitAssetList?.count guard count != nil && count! > 0 else { @@ -85,7 +85,7 @@ class AssetListViewController: UICollectionViewController { self.collectionView?.scrollToItem(at: indexPath, at: .bottom, animated: false) } } - + func scrollCollectionViewToInitialPosition() { guard isFirstAppearance else { return @@ -94,21 +94,21 @@ class AssetListViewController: UICollectionViewController { self.scrollCollectionView(to: indexPath) isFirstAppearance = false } - - // MARK: - UICollectionViewDataSource - + + // MARK: - UICollectionViewDataSource + override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return photoKitAssetList.count } - + // MARK: - UICollectionViewDelegate - + override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { if let nohanaImagePickerController = nohanaImagePickerController { nohanaImagePickerController.delegate?.nohanaImagePicker?(nohanaImagePickerController, didSelectPhotoKitAsset: photoKitAssetList[indexPath.item].originalAsset) } } - + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AssetCell", for: indexPath) as? AssetCell, let nohanaImagePickerController = nohanaImagePickerController else { @@ -116,7 +116,7 @@ class AssetListViewController: UICollectionViewController { } cell.tag = indexPath.item cell.update(asset: photoKitAssetList[indexPath.row], nohanaImagePickerController: nohanaImagePickerController) - + let imageSize = CGSize( width: cellSize.width * UIScreen.main.scale, height: cellSize.height * UIScreen.main.scale @@ -133,31 +133,29 @@ class AssetListViewController: UICollectionViewController { } return (nohanaImagePickerController.delegate?.nohanaImagePicker?(nohanaImagePickerController, assetListViewController: self, cell: cell, indexPath: indexPath, photoKitAsset: asset.originalAsset)) ?? cell } - + // MARK: - UICollectionViewDelegateFlowLayout - + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize { return cellSize } - + // MARK: - Storyboard - + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let selectedIndexPath = collectionView?.indexPathsForSelectedItems?.first else { return } - + let assetListDetailViewController = segue.destination as! AssetDetailListViewController assetListDetailViewController.photoKitAssetList = photoKitAssetList assetListDetailViewController.nohanaImagePickerController = nohanaImagePickerController assetListDetailViewController.currentIndexPath = selectedIndexPath } - + // MARK: - IBAction @IBAction func didPushDone(_ sender: AnyObject) { - let pickedPhotoKitAssets = nohanaImagePickerController!.pickedAssetList.map{ ($0 as! PhotoKitAsset).originalAsset } + let pickedPhotoKitAssets = nohanaImagePickerController!.pickedAssetList.map { ($0 as! PhotoKitAsset).originalAsset } nohanaImagePickerController!.delegate?.nohanaImagePicker(nohanaImagePickerController!, didFinishPickingPhotoKitAssets: pickedPhotoKitAssets ) } } - - diff --git a/NohanaImagePicker/ContractingAnimationController.swift b/NohanaImagePicker/ContractingAnimationController.swift index 55e1f15..19af456 100644 --- a/NohanaImagePicker/ContractingAnimationController.swift +++ b/NohanaImagePicker/ContractingAnimationController.swift @@ -21,7 +21,7 @@ extension Size { let origin = CGPoint(x: toCell.frame.origin.x, y: toCell.frame.origin.y - toVC.collectionView!.contentOffset.y) return CGRect(origin: origin, size: toCell.frame.size) } - + static func contractingAnimationFromCellRect(_ fromVC: AssetDetailListViewController, fromCell: AssetDetailCell, contractingImageSize: CGSize) -> CGRect { var rect = AVMakeRect(aspectRatio: contractingImageSize, insideRect: fromCell.imageView.frame) rect.origin.y += Size.appBarHeight(fromVC) @@ -32,17 +32,17 @@ extension Size { } class ContractingAnimationController: NSObject, UIViewControllerAnimatedTransitioning { - + var fromCell: AssetDetailCell - + init(_ fromCell: AssetDetailCell) { self.fromCell = fromCell } - + func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { return 0.3 } - + func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { guard let fromVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) as? AssetDetailListViewController, @@ -50,7 +50,7 @@ class ContractingAnimationController: NSObject, UIViewControllerAnimatedTransiti else { return } - + var toCellTmp = toVC.collectionView?.cellForItem(at: fromVC.currentIndexPath as IndexPath) as? AssetCell if toCellTmp == nil { // if toCell is not shown in collection view, scroll collection view to toCell index path. @@ -58,11 +58,11 @@ class ContractingAnimationController: NSObject, UIViewControllerAnimatedTransiti toVC.collectionView?.layoutIfNeeded() toCellTmp = toVC.collectionView?.cellForItem(at: fromVC.currentIndexPath as IndexPath) as? AssetCell } - + guard let toCell = toCellTmp else { return } - + let contractingImageView = UIImageView(image: fromCell.imageView.image) contractingImageView.contentMode = toCell.imageView.contentMode contractingImageView.clipsToBounds = true @@ -73,7 +73,7 @@ class ContractingAnimationController: NSObject, UIViewControllerAnimatedTransiti toVC.view.alpha = 0 fromCell.alpha = 0 toCell.alpha = 0 - + UIView.animate( withDuration: transitionDuration(using: transitionContext), delay: 0, @@ -87,8 +87,8 @@ class ContractingAnimationController: NSObject, UIViewControllerAnimatedTransiti contractingImageView.removeFromSuperview() transitionContext.completeTransition(!transitionContext.transitionWasCancelled) } - + } - - + + } diff --git a/NohanaImagePicker/EmptyIndicatable.swift b/NohanaImagePicker/EmptyIndicatable.swift index 5d0f38c..defc237 100644 --- a/NohanaImagePicker/EmptyIndicatable.swift +++ b/NohanaImagePicker/EmptyIndicatable.swift @@ -21,7 +21,7 @@ public protocol EmptyIndicatable { public extension EmptyIndicatable where Self: UIViewController { func updateVisibilityOfEmptyIndicator(_ emptyIndicator: UIView) { - if isEmpty(){ + if isEmpty() { if !view.subviews.contains(emptyIndicator) { view.addSubview(emptyIndicator) } diff --git a/NohanaImagePicker/ExpandingAnimationController.swift b/NohanaImagePicker/ExpandingAnimationController.swift index b31f36e..0482be5 100644 --- a/NohanaImagePicker/ExpandingAnimationController.swift +++ b/NohanaImagePicker/ExpandingAnimationController.swift @@ -22,31 +22,31 @@ extension Size { let origin = CGPoint(x: fromCell.frame.origin.x, y: fromCell.frame.origin.y - fromVC.collectionView!.contentOffset.y) return CGRect(origin: origin, size: fromCell.frame.size) } - - static func expandingAnimationToCellRect(_ fromVC: UIViewController, toSize:CGSize) -> CGRect { + + static func expandingAnimationToCellRect(_ fromVC: UIViewController, toSize: CGSize) -> CGRect { return AVMakeRect(aspectRatio: toSize, insideRect: Size.screenRectWithoutAppBar(fromVC)) } } class ExpandingAnimationController: NSObject, UIViewControllerAnimatedTransitioning { - + var fromCell: AssetCell - + init(_ fromCell: AssetCell) { self.fromCell = fromCell } - + func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { return 0.3 } - + func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { guard let fromVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) as? AssetListViewController, let toVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) as? AssetDetailListViewController else { return } - + let expandingImageView = UIImageView(image: fromCell.imageView.image) expandingImageView.contentMode = fromCell.imageView.contentMode expandingImageView.clipsToBounds = true @@ -58,7 +58,7 @@ class ExpandingAnimationController: NSObject, UIViewControllerAnimatedTransition toVC.collectionView?.isHidden = true toVC.view.backgroundColor = UIColor.black fromCell.alpha = 0 - + UIView.animate( withDuration: transitionDuration(using: transitionContext), delay: 0, @@ -75,6 +75,5 @@ class ExpandingAnimationController: NSObject, UIViewControllerAnimatedTransition transitionContext.completeTransition(!transitionContext.transitionWasCancelled) } } - -} +} diff --git a/NohanaImagePicker/ItemList.swift b/NohanaImagePicker/ItemList.swift index 9be8a04..dc4e839 100644 --- a/NohanaImagePicker/ItemList.swift +++ b/NohanaImagePicker/ItemList.swift @@ -16,7 +16,7 @@ public protocol ItemList: Collection { associatedtype Item - var title:String { get } + var title: String { get } func update(_ handler:(() -> Void)?) subscript (index: Int) -> Item { get } } @@ -28,8 +28,8 @@ extension ItemList { } public protocol Asset { - var identifier:Int { get } - func image(targetSize:CGSize, handler: @escaping (ImageData?) -> Void) + var identifier: Int { get } + func image(targetSize: CGSize, handler: @escaping (ImageData?) -> Void) } public struct ImageData { diff --git a/NohanaImagePicker/MomentCell.swift b/NohanaImagePicker/MomentCell.swift index 55926fc..9334496 100644 --- a/NohanaImagePicker/MomentCell.swift +++ b/NohanaImagePicker/MomentCell.swift @@ -18,7 +18,7 @@ import UIKit class MomentCell: AlbumCell { var config: NohanaImagePickerController.Config! - + override func draw(_ rect: CGRect) { super.draw(rect) let lineWidth: CGFloat = 1 / UIScreen.main.scale diff --git a/NohanaImagePicker/MomentViewController.swift b/NohanaImagePicker/MomentViewController.swift index 4bf9a7e..dd807e7 100644 --- a/NohanaImagePicker/MomentViewController.swift +++ b/NohanaImagePicker/MomentViewController.swift @@ -18,20 +18,20 @@ import UIKit import Photos class MomentViewController: AssetListViewController, ActivityIndicatable { - + var momentAlbumList: PhotoKitAlbumList! - + override func viewDidLoad() { super.viewDidLoad() setUpActivityIndicator() } - + override func updateTitle() { if let nohanaImagePickerController = nohanaImagePickerController { title = NSLocalizedString("albumlist.moment.title", tableName: "NohanaImagePicker", bundle: nohanaImagePickerController.assetBundle, comment: "") } } - + override func scrollCollectionView(to indexPath: IndexPath) { let count: Int? = momentAlbumList?.count guard count != nil && count! > 0 else { @@ -41,7 +41,7 @@ class MomentViewController: AssetListViewController, ActivityIndicatable { self.collectionView?.scrollToItem(at: indexPath, at: .bottom, animated: false) } } - + override func scrollCollectionViewToInitialPosition() { guard isFirstAppearance else { return @@ -54,29 +54,29 @@ class MomentViewController: AssetListViewController, ActivityIndicatable { scrollCollectionView(to: indexPath) isFirstAppearance = false } - + // MARK: - UICollectionViewDataSource - + override func numberOfSections(in collectionView: UICollectionView) -> Int { if let activityIndicator = activityIndicator { updateVisibilityOfActivityIndicator(activityIndicator) } - + return momentAlbumList.count } - + override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return momentAlbumList[section].count } - + // MARK: - UICollectionViewDelegate - + override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AssetCell", for: indexPath) as? AssetCell, let nohanaImagePickerController = nohanaImagePickerController else { fatalError("failed to dequeueReusableCellWithIdentifier(\"AssetCell\")") } - + let asset = momentAlbumList[indexPath.section][indexPath.row] cell.tag = indexPath.item cell.update(asset: asset, nohanaImagePickerController: nohanaImagePickerController) @@ -96,7 +96,7 @@ class MomentViewController: AssetListViewController, ActivityIndicatable { } return (nohanaImagePickerController.delegate?.nohanaImagePicker?(nohanaImagePickerController, assetListViewController: self, cell: cell, indexPath: indexPath, photoKitAsset: asset.originalAsset)) ?? cell } - + override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { switch kind { case UICollectionElementKindSectionHeader: @@ -110,7 +110,7 @@ class MomentViewController: AssetListViewController, ActivityIndicatable { formatter.dateStyle = .long formatter.timeStyle = DateFormatter.Style.none header.dateLabel.text = formatter.string(from: date as Date) - } else { + } else { header.dateLabel.text = "" } return header @@ -118,33 +118,33 @@ class MomentViewController: AssetListViewController, ActivityIndicatable { fatalError("failed to create MomentHeader") } } - + // MARK: - ActivityIndicatable - + var activityIndicator: UIActivityIndicatorView? var isLoading = true - + func setUpActivityIndicator() { activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray) let screenRect = Size.screenRectWithoutAppBar(self) activityIndicator?.center = CGPoint(x: screenRect.size.width / 2, y: screenRect.size.height / 2) activityIndicator?.startAnimating() } - + func isProgressing() -> Bool { return isLoading } - + // MARK: - UICollectionViewDelegate - + override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { if let nohanaImagePickerController = nohanaImagePickerController { nohanaImagePickerController.delegate?.nohanaImagePicker?(nohanaImagePickerController, didSelectPhotoKitAsset: momentAlbumList[indexPath.section][indexPath.row].originalAsset) } } - + // MARK: - Storyboard - + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let selectedIndexPath = collectionView?.indexPathsForSelectedItems?.first else { return @@ -154,11 +154,11 @@ class MomentViewController: AssetListViewController, ActivityIndicatable { assetListDetailViewController.nohanaImagePickerController = nohanaImagePickerController assetListDetailViewController.currentIndexPath = selectedIndexPath } - + // MARK: - IBAction - + @IBAction override func didPushDone(_ sender: AnyObject) { super.didPushDone(sender) } - + } diff --git a/NohanaImagePicker/NohanaImagePickerController.swift b/NohanaImagePicker/NohanaImagePickerController.swift index d777016..a1fce79 100644 --- a/NohanaImagePicker/NohanaImagePickerController.swift +++ b/NohanaImagePicker/NohanaImagePickerController.swift @@ -23,7 +23,7 @@ public enum MediaType: Int { @objc public protocol NohanaImagePickerControllerDelegate { func nohanaImagePickerDidCancel(_ picker: NohanaImagePickerController) - func nohanaImagePicker(_ picker: NohanaImagePickerController, didFinishPickingPhotoKitAssets pickedAssts :[PHAsset]) + func nohanaImagePicker(_ picker: NohanaImagePickerController, didFinishPickingPhotoKitAssets pickedAssts: [PHAsset]) @objc optional func nohanaImagePicker(_ picker: NohanaImagePickerController, willPickPhotoKitAsset asset: PHAsset, pickedAssetsCount: Int) -> Bool @objc optional func nohanaImagePicker(_ picker: NohanaImagePickerController, didPickPhotoKitAsset asset: PHAsset, pickedAssetsCount: Int) @objc optional func nohanaImagePicker(_ picker: NohanaImagePickerController, willDropPhotoKitAsset asset: PHAsset, pickedAssetsCount: Int) -> Bool @@ -34,11 +34,11 @@ public enum MediaType: Int { @objc optional func nohanaImagePicker(_ picker: NohanaImagePickerController, assetListViewController: UICollectionViewController, cell: UICollectionViewCell, indexPath: IndexPath, photoKitAsset: PHAsset) -> UICollectionViewCell @objc optional func nohanaImagePicker(_ picker: NohanaImagePickerController, assetDetailListViewController: UICollectionViewController, cell: UICollectionViewCell, indexPath: IndexPath, photoKitAsset: PHAsset) -> UICollectionViewCell @objc optional func nohanaImagePicker(_ picker: NohanaImagePickerController, assetDetailListViewController: UICollectionViewController, didChangeAssetDetailPage indexPath: IndexPath, photoKitAsset: PHAsset) - + } open class NohanaImagePickerController: UIViewController { - + open var maximumNumberOfSelection: Int = 21 // set 0 to no limit open var numberOfColumnsInPortrait: Int = 4 open var numberOfColumnsInLandscape: Int = 7 @@ -46,12 +46,12 @@ open class NohanaImagePickerController: UIViewController { open var shouldShowMoment: Bool = true open var shouldShowEmptyAlbum: Bool = false open var toolbarHidden: Bool = false - open var canPickAsset = { (asset:Asset) -> Bool in + open var canPickAsset = { (asset: Asset) -> Bool in return true } open var config: Config = Config() - - lazy var assetBundle:Bundle = { + + lazy var assetBundle: Bundle = { let bundle = Bundle(for: type(of: self)) if let path = bundle.path(forResource: "NohanaImagePicker", ofType: "bundle") { return Bundle(path: path)! @@ -62,7 +62,7 @@ open class NohanaImagePickerController: UIViewController { let mediaType: MediaType let enableExpandingPhotoAnimation: Bool fileprivate let assetCollectionSubtypes: [PHAssetCollectionSubtype] - + public init() { assetCollectionSubtypes = [ .albumRegular, @@ -83,7 +83,7 @@ open class NohanaImagePickerController: UIViewController { super.init(nibName: nil, bundle: nil) self.pickedAssetList.nohanaImagePickerController = self } - + public init(assetCollectionSubtypes: [PHAssetCollectionSubtype], mediaType: MediaType, enableExpandingPhotoAnimation: Bool) { self.assetCollectionSubtypes = assetCollectionSubtypes self.mediaType = mediaType @@ -99,7 +99,7 @@ open class NohanaImagePickerController: UIViewController { override open func viewDidLoad() { super.viewDidLoad() - + // show albumListViewController let storyboard = UIStoryboard(name: "NohanaImagePicker", bundle: assetBundle) let viewControllerId = enableExpandingPhotoAnimation ? "EnableAnimationNavigationController" : "DisableAnimationNavigationController" @@ -109,7 +109,7 @@ open class NohanaImagePickerController: UIViewController { addChildViewController(navigationController) view.addSubview(navigationController.view) navigationController.didMove(toParentViewController: self) - + // setup albumListViewController guard let albumListViewController = navigationController.topViewController as? AlbumListViewController else { fatalError("albumListViewController is not topViewController.") @@ -128,11 +128,11 @@ open class NohanaImagePickerController: UIViewController { }) albumListViewController.nohanaImagePickerController = self } - + open func pickAsset(_ asset: Asset) { _ = pickedAssetList.pick(asset: asset) } - + open func dropAsset(_ asset: Asset) { _ = pickedAssetList.drop(asset: asset) } @@ -146,7 +146,7 @@ extension NohanaImagePickerController { public var separator: UIColor? } public var color = Color() - + public struct Image { public var pickedSmall: UIImage? public var pickedLarge: UIImage? @@ -154,7 +154,7 @@ extension NohanaImagePickerController { public var droppedLarge: UIImage? } public var image = Image() - + public struct Strings { public var albumListTitle: String? public var albumListMomentTitle: String? diff --git a/NohanaImagePicker/PhotoKitAlbumList.swift b/NohanaImagePicker/PhotoKitAlbumList.swift index 27d1011..7e042d7 100644 --- a/NohanaImagePicker/PhotoKitAlbumList.swift +++ b/NohanaImagePicker/PhotoKitAlbumList.swift @@ -16,13 +16,13 @@ import Photos public class PhotoKitAlbumList: ItemList { - - private var albumList:[Item] = [] + + private var albumList: [Item] = [] private let assetCollectionTypes: [PHAssetCollectionType] private let assetCollectionSubtypes: [PHAssetCollectionSubtype] private let mediaType: MediaType private var shouldShowEmptyAlbum: Bool - + // MARK: - init init(assetCollectionTypes: [PHAssetCollectionType], assetCollectionSubtypes: [PHAssetCollectionSubtype], mediaType: MediaType, shouldShowEmptyAlbum: Bool, handler:(() -> Void)?) { @@ -36,24 +36,24 @@ public class PhotoKitAlbumList: ItemList { } } } - + // MARK: - ItemList - + public typealias Item = PhotoKitAssetList - - open var title:String { + + open var title: String { return "PhotoKit" } - + open func update(_ handler:(() -> Void)?) { DispatchQueue.global(qos: .default).async { var albumListFetchResult: [PHFetchResult] = [] for type in self.assetCollectionTypes { albumListFetchResult = albumListFetchResult + [PHAssetCollection.fetchAssetCollections(with: type, subtype: .any, options: nil)] } - + self.albumList = [] - var tmpAlbumList:[Item] = [] + var tmpAlbumList: [Item] = [] let isAssetCollectionSubtypeAny = self.assetCollectionSubtypes.contains(.any) for fetchResult in albumListFetchResult { fetchResult.enumerateObjects({ (album, index, stop) in @@ -65,29 +65,29 @@ public class PhotoKitAlbumList: ItemList { }) } if self.assetCollectionTypes == [.moment] { - self.albumList = tmpAlbumList.sorted{ $0.date!.timeIntervalSince1970 < $1.date!.timeIntervalSince1970 } + self.albumList = tmpAlbumList.sorted { $0.date!.timeIntervalSince1970 < $1.date!.timeIntervalSince1970 } } else { self.albumList = tmpAlbumList } - + if let handler = handler { handler() } } } - + open subscript (index: Int) -> Item { return albumList[index] as Item } - + // MARK: - CollectionType - + open var startIndex: Int { return albumList.startIndex } - + open var endIndex: Int { return albumList.endIndex } - + } diff --git a/NohanaImagePicker/PhotoKitAsset.swift b/NohanaImagePicker/PhotoKitAsset.swift index 4e7fc0c..ec69b12 100644 --- a/NohanaImagePicker/PhotoKitAsset.swift +++ b/NohanaImagePicker/PhotoKitAsset.swift @@ -15,25 +15,25 @@ */ import Photos -public class PhotoKitAsset :Asset { - +public class PhotoKitAsset: Asset { + let asset: PHAsset - + public init(asset: PHAsset) { self.asset = asset } - + public var originalAsset: PHAsset { return asset as PHAsset } - + // MARK: - Asset - - public var identifier:Int { + + public var identifier: Int { return asset.localIdentifier.hash } - - public func image(targetSize:CGSize, handler: @escaping (ImageData?) -> Void) { + + public func image(targetSize: CGSize, handler: @escaping (ImageData?) -> Void) { let option = PHImageRequestOptions() option.isNetworkAccessAllowed = true diff --git a/NohanaImagePicker/PhotoKitAssetList.swift b/NohanaImagePicker/PhotoKitAssetList.swift index 338a432..7c185f9 100644 --- a/NohanaImagePicker/PhotoKitAssetList.swift +++ b/NohanaImagePicker/PhotoKitAssetList.swift @@ -16,30 +16,30 @@ import Photos -open class PhotoKitAssetList :ItemList { - +open class PhotoKitAssetList: ItemList { + fileprivate let mediaType: MediaType open let assetList: PHAssetCollection fileprivate var fetchResult: PHFetchResult! - + init(album: PHAssetCollection, mediaType: MediaType) { self.assetList = album self.mediaType = mediaType update() } - + // MARK: - ItemList - + public typealias Item = PhotoKitAsset - + open var title: String { return assetList.localizedTitle ?? "" } - + open var date: Date? { return assetList.startDate } - + class func fetchOptions(_ mediaType: MediaType) -> PHFetchOptions { let options = PHFetchOptions() switch mediaType { @@ -50,24 +50,24 @@ open class PhotoKitAssetList :ItemList { } return options } - + open func update(_ handler: (() -> Void)? = nil) { fetchResult = PHAsset.fetchAssets(in: assetList, options: PhotoKitAssetList.fetchOptions(mediaType)) if let handler = handler { handler() } } - + open subscript (index: Int) -> Item { return Item(asset: fetchResult.object(at: index)) } - + // MARK: - CollectionType - + open var startIndex: Int { return 0 } - + open var endIndex: Int { return fetchResult.count } diff --git a/NohanaImagePicker/PickedAssetList.swift b/NohanaImagePicker/PickedAssetList.swift index 1d70178..0cdf7ad 100644 --- a/NohanaImagePicker/PickedAssetList.swift +++ b/NohanaImagePicker/PickedAssetList.swift @@ -17,46 +17,45 @@ import Foundation class PickedAssetList: ItemList { - + var assetlist: Array = [] weak var nohanaImagePickerController: NohanaImagePickerController? - + // MARK: - ItemList - + typealias Item = Asset - + var title: String { return "Selected Assets" } - + func update(_ handler:(() -> Void)?) { fatalError("not supported") } - + subscript (index: Int) -> Item { return assetlist[index] } - + // MARK: - CollectionType - + var startIndex: Int { return 0 } - + var endIndex: Int { return assetlist.count } - + // MARK: - Manage assetlist - + func pick(asset: Asset) -> Bool { guard !isPicked(asset) else { return false } let assetsCountBeforePicking = self.count if asset is PhotoKitAsset { - if let canPick = nohanaImagePickerController!.delegate?.nohanaImagePicker?(nohanaImagePickerController!, willPickPhotoKitAsset: (asset as! PhotoKitAsset).originalAsset, pickedAssetsCount: assetsCountBeforePicking) - , !canPick { + if let canPick = nohanaImagePickerController!.delegate?.nohanaImagePicker?(nohanaImagePickerController!, willPickPhotoKitAsset: (asset as! PhotoKitAsset).originalAsset, pickedAssetsCount: assetsCountBeforePicking), !canPick { return false } } @@ -80,17 +79,17 @@ class PickedAssetList: ItemList { ) } return true - + } - + func drop(asset: Asset) -> Bool { let assetsCountBeforeDropping = self.count if asset is PhotoKitAsset { - if let canDrop = nohanaImagePickerController!.delegate?.nohanaImagePicker?(nohanaImagePickerController!, willDropPhotoKitAsset: (asset as! PhotoKitAsset).originalAsset, pickedAssetsCount: assetsCountBeforeDropping) , !canDrop { + if let canDrop = nohanaImagePickerController!.delegate?.nohanaImagePicker?(nohanaImagePickerController!, willDropPhotoKitAsset: (asset as! PhotoKitAsset).originalAsset, pickedAssetsCount: assetsCountBeforeDropping), !canDrop { return false } } - assetlist = assetlist.filter{ $0.identifier != asset.identifier } + assetlist = assetlist.filter { $0.identifier != asset.identifier } let assetsCountAfterDropping = self.count if asset is PhotoKitAsset { let originalAsset = (asset as! PhotoKitAsset).originalAsset @@ -108,9 +107,9 @@ class PickedAssetList: ItemList { } return true } - + func isPicked(_ asset: Asset) -> Bool { - return assetlist.contains{ $0.identifier == asset.identifier } + return assetlist.contains { $0.identifier == asset.identifier } } - + } diff --git a/NohanaImagePicker/Size.swift b/NohanaImagePicker/Size.swift index 87fe8e4..b9b9006 100644 --- a/NohanaImagePicker/Size.swift +++ b/NohanaImagePicker/Size.swift @@ -15,22 +15,22 @@ */ struct Size { - + static var statusBarHeight: CGFloat { if UIApplication.shared.isStatusBarHidden { return 0 } return UIApplication.shared.statusBarFrame.size.height } - + static func navigationBarHeight(_ viewController: UIViewController) -> CGFloat { return viewController.navigationController?.navigationBar.frame.size.height ?? CGFloat(0) } - + static func appBarHeight(_ viewController: UIViewController) -> CGFloat { return statusBarHeight + navigationBarHeight(viewController) } - + static func toolbarHeight(_ viewController: UIViewController) -> CGFloat { guard let navigationController = viewController.navigationController else { return 0 @@ -40,7 +40,7 @@ struct Size { } return navigationController.toolbar.frame.size.height } - + static func screenRectWithoutAppBar(_ viewController: UIViewController) -> CGRect { let appBarHeight = Size.appBarHeight(viewController) let toolbarHeight = Size.toolbarHeight(viewController) diff --git a/NohanaImagePicker/SwipeInteractionController.swift b/NohanaImagePicker/SwipeInteractionController.swift index ec056a0..7b378c9 100644 --- a/NohanaImagePicker/SwipeInteractionController.swift +++ b/NohanaImagePicker/SwipeInteractionController.swift @@ -17,9 +17,9 @@ import UIKit class SwipeInteractionController: UIPercentDrivenInteractiveTransition { - + var viewController: UIViewController? - + func attachToViewController(_ viewController: UIViewController) { let count: Int? = viewController.navigationController?.viewControllers.count guard count != nil && count! > 1 else {