From fe376657c193e5e8f8f135e01c59cec330b001c5 Mon Sep 17 00:00:00 2001 From: mysteryRan <83445298@qq.com> Date: Wed, 24 Feb 2021 13:41:18 +0800 Subject: [PATCH] support dark mode --- .../Picker/FMPhotoPickerViewController.swift | 32 ++++++++- .../Editor/FMImageEditorViewController.swift | 69 ++++++++++++++++--- .../Editor/Views/Crop/FMCropView.swift | 17 ++++- .../FMPhotoPresenterViewController.swift | 31 ++++++++- .../Views/FMPresenterEditMenuView.swift | 11 ++- .../source/Utilities/Const.swift | 63 +++++++++++++++-- 6 files changed, 204 insertions(+), 19 deletions(-) diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.swift index 48c05c7..47127e5 100644 --- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.swift +++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.swift @@ -12,6 +12,12 @@ import Photos // MARK: - Delegate protocol public protocol FMPhotoPickerViewControllerDelegate: class { func fmPhotoPickerController(_ picker: FMPhotoPickerViewController, didFinishPickingPhotoWith photos: [UIImage]) + func fmPhotoPickerController(_ picker: FMPhotoPickerViewController, didFinishPickingPhotoWith assets: [PHAsset]) +} + +public extension FMPhotoPickerViewControllerDelegate { + func fmPhotoPickerController(_ picker: FMPhotoPickerViewController, didFinishPickingPhotoWith photos: [UIImage]) {} + func fmPhotoPickerController(_ picker: FMPhotoPickerViewController, didFinishPickingPhotoWith assets: [PHAsset]) {} } public class FMPhotoPickerViewController: UIViewController { @@ -68,7 +74,16 @@ public class FMPhotoPickerViewController: UIViewController { public override func loadView() { view = UIView() - view.backgroundColor = .white +// view.backgroundColor = .white + if #available(iOS 13.0, *) { + if UITraitCollection.current.userInterfaceStyle == .dark { + self.view.backgroundColor = .black + } else { + self.view.backgroundColor = .white + } + } else { + self.view.backgroundColor = .white + } initializeViews() setupView() } @@ -154,6 +169,12 @@ public class FMPhotoPickerViewController: UIViewController { } private func processDetermination() { + if config.shouldReturnAsset { + let assets = dataSource.getSelectedPhotos().compactMap { $0.asset } + delegate?.fmPhotoPickerController(self, didFinishPickingPhotoWith: assets) + return + } + FMLoadingView.shared.show() var dict = [Int:UIImage]() @@ -348,6 +369,15 @@ private extension FMPhotoPickerViewController { func initializeViews() { let headerView = UIView() headerView.backgroundColor = .white + if #available(iOS 13.0, *) { + if UITraitCollection.current.userInterfaceStyle == .dark { + headerView.backgroundColor = .black + } else { + headerView.backgroundColor = .white + } + } else { + headerView.backgroundColor = .white + } headerView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(headerView) diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/FMImageEditorViewController.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/FMImageEditorViewController.swift index 4ee1af2..712e623 100644 --- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/FMImageEditorViewController.swift +++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/FMImageEditorViewController.swift @@ -160,6 +160,15 @@ public class FMImageEditorViewController: UIViewController { public override func loadView() { view = UIView() view.backgroundColor = .white + if #available(iOS 13.0, *) { + if UITraitCollection.current.userInterfaceStyle == .dark { + self.view.backgroundColor = .black + } else { + self.view.backgroundColor = .white + } + } else { + self.view.backgroundColor = .white + } setupView() } @@ -181,6 +190,7 @@ public class FMImageEditorViewController: UIViewController { appliedCrop: fmPhotoAsset.getAppliedCrop(), appliedCropArea: fmPhotoAsset.getAppliedCropArea()) cropView.foregroundView.eclipsePreviewEnabled = config.eclipsePreviewEnabled + cropView.backgroundColor = .red view.addSubview(cropView) view.sendSubviewToBack(cropView) @@ -256,10 +266,18 @@ public class FMImageEditorViewController: UIViewController { showAnimatedMenu() - if config.availableFilters != nil { - openFiltersMenu() - } else if config.availableCrops != nil { - openCropsMenu() + if config.useCropFirst { + if config.availableCrops != nil { + openCropsMenu() + } else if config.availableFilters != nil { + openFiltersMenu() + } + } else { + if config.availableFilters != nil { + openFiltersMenu() + } else if config.availableCrops != nil { + openCropsMenu() + } } // show view the crop view image is re-located @@ -493,7 +511,16 @@ private extension FMImageEditorViewController { func setupView() { let headerView = UIView() self.headerView = headerView - headerView.backgroundColor = .white + + if #available(iOS 13.0, *) { + if UITraitCollection.current.userInterfaceStyle == .dark { + headerView.backgroundColor = .black + } else { + headerView.backgroundColor = .white + } + } else { + headerView.backgroundColor = .white + } headerView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(headerView) @@ -556,7 +583,16 @@ private extension FMImageEditorViewController { let bottomViewContainer = UIView() self.bottomViewContainer = bottomViewContainer - bottomViewContainer.backgroundColor = .white + + if #available(iOS 13.0, *) { + if UITraitCollection.current.userInterfaceStyle == .dark { + bottomViewContainer.backgroundColor = .black + } else { + bottomViewContainer.backgroundColor = .white + } + } else { + bottomViewContainer.backgroundColor = .white + } bottomViewContainer.translatesAutoresizingMaskIntoConstraints = false view.addSubview(bottomViewContainer) @@ -586,7 +622,6 @@ private extension FMImageEditorViewController { filterMenuButton.titleEdgeInsets = .init(top: 0, left: 4, bottom: 0, right: -4) filterMenuButton.translatesAutoresizingMaskIntoConstraints = false - bottomMenuContainer.addArrangedSubview(filterMenuButton) let cropMenuButton = UIButton(type: .custom) @@ -595,11 +630,27 @@ private extension FMImageEditorViewController { cropMenuButton.titleEdgeInsets = .init(top: 0, left: 4, bottom: 0, right: -4) cropMenuButton.translatesAutoresizingMaskIntoConstraints = false - bottomMenuContainer.addArrangedSubview(cropMenuButton) + + if config.useCropFirst { + bottomMenuContainer.addArrangedSubview(cropMenuButton) + bottomMenuContainer.addArrangedSubview(filterMenuButton) + } else { + bottomMenuContainer.addArrangedSubview(filterMenuButton) + bottomMenuContainer.addArrangedSubview(cropMenuButton) + } let subMenuContainer = UIView() self.subMenuContainer = subMenuContainer - subMenuContainer.backgroundColor = .white + + if #available(iOS 13.0, *) { + if UITraitCollection.current.userInterfaceStyle == .dark { + subMenuContainer.backgroundColor = .black + } else { + subMenuContainer.backgroundColor = .white + } + } else { + subMenuContainer.backgroundColor = .white + } subMenuContainer.translatesAutoresizingMaskIntoConstraints = false bottomViewContainer.addSubview(subMenuContainer) diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/Crop/FMCropView.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/Crop/FMCropView.swift index 5adb163..c10eeae 100644 --- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/Crop/FMCropView.swift +++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/Crop/FMCropView.swift @@ -86,7 +86,17 @@ class FMCropView: UIView { cropBoxView = FMCropCropBoxView(cropRatio: nil) foregroundView = FMCropForegroundView(image: image) - translucencyView = FMCropTranslucencyView(effect: UIBlurEffect(style: .light)) + + + if #available(iOS 13.0, *) { + if UITraitCollection.current.userInterfaceStyle == .dark { + translucencyView = FMCropTranslucencyView(effect: UIBlurEffect(style: .dark)) + } else { + translucencyView = FMCropTranslucencyView(effect: UIBlurEffect(style: .light)) + } + } else { + translucencyView = FMCropTranslucencyView(effect: UIBlurEffect(style: .light)) + } cornersView = FMCropCropBoxCornersView() @@ -126,6 +136,9 @@ class FMCropView: UIView { translucencyView.insert(toView: self) translucencyView.isUserInteractionEnabled = false + + foregroundView.backgroundColor = .blue + addSubview(whiteBackgroundView) addSubview(foregroundView) addSubview(cropBoxView) @@ -205,7 +218,7 @@ class FMCropView: UIView { } //The scale we need to scale up the crop box to fit full screen - let cropBoxScale = min(contentFrame.width / cropFrame.width, contentFrame.height / cropFrame.height) + let cropBoxScale = min(contentFrame.width / cropFrame.width, contentFrame.height / cropFrame.height) // calculate new cropFrame that is translated to center of contentBound cropFrame.size.width = cropFrame.size.width * cropBoxScale diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.swift index b821975..427d491 100644 --- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.swift +++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.swift @@ -86,7 +86,16 @@ class FMPhotoPresenterViewController: UIViewController { override func loadView() { view = UIView() - view.backgroundColor = .white +// view.backgroundColor = .white + if #available(iOS 13.0, *) { + if UITraitCollection.current.userInterfaceStyle == .dark { + self.view.backgroundColor = .black + } else { + self.view.backgroundColor = .white + } + } else { + self.view.backgroundColor = .white + } setupView() } @@ -318,7 +327,15 @@ private extension FMPhotoPresenterViewController { // private weak var unsafeAreaBottomView: UIView! let headerView = UIView() - headerView.backgroundColor = .white + if #available(iOS 13.0, *) { + if UITraitCollection.current.userInterfaceStyle == .dark { + headerView.backgroundColor = .black + } else { + headerView.backgroundColor = .white + } + } else { + headerView.backgroundColor = .white + } headerView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(headerView) @@ -484,6 +501,16 @@ private extension FMPhotoPresenterViewController { let bottomViewContainer = UIView() self.bottomViewContainer = bottomViewContainer bottomViewContainer.backgroundColor = .white + if #available(iOS 13.0, *) { + if UITraitCollection.current.userInterfaceStyle == .dark { + bottomViewContainer.backgroundColor = .black + } else { + bottomViewContainer.backgroundColor = .white + } + } else { + bottomViewContainer.backgroundColor = .white + } + bottomViewContainer.translatesAutoresizingMaskIntoConstraints = false view.addSubview(bottomViewContainer) diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Views/FMPresenterEditMenuView.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Views/FMPresenterEditMenuView.swift index f4c4cd6..93aa1ee 100644 --- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Views/FMPresenterEditMenuView.swift +++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Views/FMPresenterEditMenuView.swift @@ -26,7 +26,16 @@ class FMPresenterEditMenuView: UIView { editButton.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true // editButton.widthAnchor.constraint(greaterThanOrEqualToConstant: 80).isActive = true editButton.heightAnchor.constraint(greaterThanOrEqualToConstant: 40).isActive = true - editButton.setTitleColor(.black, for: .normal) + if #available(iOS 13.0, *) { + if UITraitCollection.current.userInterfaceStyle == .dark { + editButton.setTitleColor(.white, for: .normal) + } else { + editButton.setTitleColor(.black, for: .normal) + } + } else { + editButton.setTitleColor(.black, for: .normal) + } + editButton.setTitle(config.strings["present_button_edit_image"], for: .normal) editButton.titleLabel?.font = UIFont.systemFont(ofSize: config.titleFontSize, weight: .bold) diff --git a/FMPhotoPicker/FMPhotoPicker/source/Utilities/Const.swift b/FMPhotoPicker/FMPhotoPicker/source/Utilities/Const.swift index e8b1f8c..350d186 100644 --- a/FMPhotoPicker/FMPhotoPicker/source/Utilities/Const.swift +++ b/FMPhotoPicker/FMPhotoPicker/source/Utilities/Const.swift @@ -15,10 +15,65 @@ internal let kKeyframeAnimationDuration: Double = 2.0 internal let kRedColor = UIColor(red: 1, green: 81/255, blue: 81/255, alpha: 1) internal let kGrayColor = UIColor(red: 114/255, green: 114/255, blue: 114/255, alpha: 1) -internal let kBlackColor = UIColor(red: 0, green: 0, blue: 0, alpha: 1) -internal let kBackgroundColor = UIColor(red: 242/255, green: 242/255, blue: 242/255, alpha: 1) -internal let kTransparentBackgroundColor = UIColor(white: 1, alpha: 0.9) -internal let kBorderColor = UIColor(red: 221/255, green: 221/255, blue: 221/255, alpha: 1) +internal var kBlackColor: UIColor = { + if #available(iOS 13, *) { + return UIColor { (UITraitCollection: UITraitCollection) -> UIColor in + if UITraitCollection.userInterfaceStyle == .dark { + return UIColor.white + } else { + return UIColor(red: 0, green: 0, blue: 0, alpha: 1) + } + } + } else { + return UIColor(red: 0, green: 0, blue: 0, alpha: 1) + } +}() + +internal var kBackgroundColor: UIColor = { + if #available(iOS 13, *) { + return UIColor { (UITraitCollection: UITraitCollection) -> UIColor in + if UITraitCollection.userInterfaceStyle == .dark { + return UIColor.black + } else { + return UIColor(red: 242/255, green: 242/255, blue: 242/255, alpha: 1) + + } + } + } else { + return UIColor(red: 242/255, green: 242/255, blue: 242/255, alpha: 1) + + } +}() + +internal var kTransparentBackgroundColor: UIColor = { + if #available(iOS 13, *) { + return UIColor { (UITraitCollection: UITraitCollection) -> UIColor in + if UITraitCollection.userInterfaceStyle == .dark { + return UIColor.black + } else { + return UIColor(white: 1, alpha: 0.9) + + } + } + } else { + return UIColor(white: 1, alpha: 0.9) + + } +}() + +internal var kBorderColor: UIColor = { + if #available(iOS 13, *) { + return UIColor { (UITraitCollection: UITraitCollection) -> UIColor in + if UITraitCollection.userInterfaceStyle == .dark { + return UIColor(red: 221/255, green: 221/255, blue: 221/255, alpha: 1) + } else { + return UIColor(red: 221/255, green: 221/255, blue: 221/255, alpha: 1) + } + } + } else { + return UIColor(red: 221/255, green: 221/255, blue: 221/255, alpha: 1) + } +}() internal let kDefaultFilter = FMFilter.None internal let kDefaultCrop = FMCrop.ratioCustom