From 994b47caddd8c1042510d326d345476a0e86a5db Mon Sep 17 00:00:00 2001
From: c-nguyen
Date: Mon, 9 Apr 2018 19:36:40 +0900
Subject: [PATCH 1/3] [ADD] custom language function
---
.../source/ImageEditor/Crop/FMCrop.swift | 41 +-----------
.../source/ImageEditor/Crop/FMCroppable.swift | 37 +++++++++++
.../Picker/FMPhotoPickerViewController.swift | 11 +++-
.../Picker/FMPhotoPickerViewController.xib | 15 ++---
.../Editor/FMImageEditorViewController.swift | 39 ++++++++----
.../Editor/FMImageEditorViewController.xib | 62 ++++++-------------
.../Editor/Views/FMCropMenuView.swift | 19 +++---
.../FMPhotoPresenterViewController.swift | 12 +++-
.../FMPhotoPresenterViewController.xib | 38 +++++-------
.../Views/FMPresenterBottomView.swift | 4 +-
.../Views/FMPresenterEditMenuView.swift | 8 ++-
.../source/Utilities/FMAlertable.swift | 6 +-
.../Utilities/FMPhotoPickerConfig.swift | 20 ++++++
.../source/Utilities/FMWarningView.swift | 8 ++-
.../FMPhotoPickerExample/ViewController.swift | 20 ++++++
15 files changed, 197 insertions(+), 143 deletions(-)
diff --git a/FMPhotoPicker/FMPhotoPicker/source/ImageEditor/Crop/FMCrop.swift b/FMPhotoPicker/FMPhotoPicker/source/ImageEditor/Crop/FMCrop.swift
index 9fc2777..dd90b98 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/ImageEditor/Crop/FMCrop.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/ImageEditor/Crop/FMCrop.swift
@@ -33,48 +33,13 @@ public enum FMCrop: FMCroppable {
}
}
- public func crop(image: UIImage, toRect rect: CGRect) -> UIImage {
- let orientation = image.imageOrientation
- let scale = image.scale
- var targetRect = CGRect()
-
- switch orientation {
- case .down:
- targetRect.origin.x = (image.size.width - rect.maxX) * scale
- targetRect.origin.y = (image.size.height - rect.maxY) * scale
- targetRect.size.width = rect.width * scale
- targetRect.size.height = rect.height * scale
- case .right:
- targetRect.origin.x = rect.minY * scale
- targetRect.origin.y = (image.size.width - rect.maxX) * scale
- targetRect.size.width = rect.height * scale
- targetRect.size.height = rect.width * scale
- case .left:
- targetRect.origin.x = image.size.height - rect.maxY * scale
- targetRect.origin.y = rect.minX * scale
- targetRect.size.width = rect.height * scale
- targetRect.size.height = rect.width * scale
- default:
- targetRect = CGRect(x: rect.origin.x * scale,
- y: rect.origin.y * scale,
- width: rect.width * scale,
- height: rect.height * scale)
- }
-
- if let croppedCGImage = image.cgImage?.cropping(to: targetRect) {
- return UIImage(cgImage: croppedCGImage, scale: scale, orientation: orientation)
- }
-
- return image
- }
-
public func name() -> String {
switch self {
case .ratio4x3: return "4:3"
case .ratio16x9: return "16:9"
- case .ratioCustom: return "カスタム"
- case .ratioOrigin: return "å…ƒã®æ¯”率"
- case .ratioSquare: return "æ£æ–¹å½¢"
+ case .ratioCustom: return "Custom"
+ case .ratioOrigin: return "Origin"
+ case .ratioSquare: return "Square"
}
}
diff --git a/FMPhotoPicker/FMPhotoPicker/source/ImageEditor/Crop/FMCroppable.swift b/FMPhotoPicker/FMPhotoPicker/source/ImageEditor/Crop/FMCroppable.swift
index 7f1b413..64b41a6 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/ImageEditor/Crop/FMCroppable.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/ImageEditor/Crop/FMCroppable.swift
@@ -14,3 +14,40 @@ public protocol FMCroppable {
func icon() -> UIImage
func ratio() -> FMCropRatio?
}
+
+extension FMCroppable {
+ public func crop(image: UIImage, toRect rect: CGRect) -> UIImage {
+ let orientation = image.imageOrientation
+ let scale = image.scale
+ var targetRect = CGRect()
+
+ switch orientation {
+ case .down:
+ targetRect.origin.x = (image.size.width - rect.maxX) * scale
+ targetRect.origin.y = (image.size.height - rect.maxY) * scale
+ targetRect.size.width = rect.width * scale
+ targetRect.size.height = rect.height * scale
+ case .right:
+ targetRect.origin.x = rect.minY * scale
+ targetRect.origin.y = (image.size.width - rect.maxX) * scale
+ targetRect.size.width = rect.height * scale
+ targetRect.size.height = rect.width * scale
+ case .left:
+ targetRect.origin.x = image.size.height - rect.maxY * scale
+ targetRect.origin.y = rect.minX * scale
+ targetRect.size.width = rect.height * scale
+ targetRect.size.height = rect.width * scale
+ default:
+ targetRect = CGRect(x: rect.origin.x * scale,
+ y: rect.origin.y * scale,
+ width: rect.width * scale,
+ height: rect.height * scale)
+ }
+
+ if let croppedCGImage = image.cgImage?.cropping(to: targetRect) {
+ return UIImage(cgImage: croppedCGImage, scale: scale, orientation: orientation)
+ }
+
+ return image
+ }
+}
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.swift
index 2a21a03..59bb1de 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.swift
@@ -21,6 +21,7 @@ public class FMPhotoPickerViewController: UIViewController {
@IBOutlet weak var numberOfSelectedPhoto: UILabel!
@IBOutlet weak var determineButton: UIButton!
@IBOutlet weak var controlBarTopConstrant: NSLayoutConstraint!
+ @IBOutlet weak var cancelButton: UIButton!
// MARK: - Public
public weak var delegate: FMPhotoPickerViewControllerDelegate? = nil
@@ -90,6 +91,12 @@ public class FMPhotoPickerViewController: UIViewController {
self.controlBarTopConstrant.constant = 44
}
}
+
+ // set button title
+ self.cancelButton.setTitle(config.strings["picker_button_cancel"], for: .normal)
+ self.cancelButton.titleLabel!.font = UIFont.systemFont(ofSize: config.titleFontSize)
+ self.determineButton.setTitle(config.strings["picker_button_select_done"], for: .normal)
+ self.determineButton.titleLabel!.font = UIFont.systemFont(ofSize: config.titleFontSize)
}
// MARK: - Target Actions
@@ -225,14 +232,14 @@ extension FMPhotoPickerViewController: UICollectionViewDataSource {
if self.dataSource.countSelectedPhoto(byType: .image) >= self.config.maxImage {
canBeAdded = false
let warning = FMWarningView.shared
- warning.message = "ç”»åƒã¯æœ€å¤§\(self.config.maxImage)個ã¾ã§é¸æŠžã§ãã¾ã™ã€‚"
+ warning.message = String(format: config.strings["picker_warning_over_image_select_format"]!, self.config.maxImage)
warning.showAndAutoHide()
}
case .video:
if self.dataSource.countSelectedPhoto(byType: .video) >= self.config.maxVideo {
canBeAdded = false
let warning = FMWarningView.shared
- warning.message = "å‹•ç”»ã¯æœ€å¤§\(self.config.maxVideo)個ã¾ã§é¸æŠžã§ãã¾ã™ã€‚"
+ warning.message = String(format: config.strings["picker_warning_over_video_select_format"]!, self.config.maxImage)
warning.showAndAutoHide()
}
case .unsupported:
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.xib b/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.xib
index 202ae0b..6015c80 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.xib
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.xib
@@ -12,6 +12,7 @@
+
@@ -29,24 +30,24 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/FMCropMenuView.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/FMCropMenuView.swift
index db6de9e..813edff 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/FMCropMenuView.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/FMCropMenuView.swift
@@ -13,11 +13,11 @@ enum FMCropControl {
case resetFrameWithoutChangeRatio
case rotate
- func name() -> String {
+ func name(from stringConfig: [String: String]) -> String {
switch self {
- case .resetFrameWithoutChangeRatio: return "リセット"
- case .resetAll: return "リセット"
- case .rotate: return "回転"
+ case .resetFrameWithoutChangeRatio: return stringConfig["editor_menu_crop_button_reset"]!
+ case .resetAll: return stringConfig["editor_menu_crop_button_reset"]!
+ case .rotate: return stringConfig["editor_menu_crop_button_rotate"]!
}
}
@@ -47,21 +47,24 @@ class FMCropMenuView: UIView {
}
}
- init(appliedCrop: FMCroppable?, availableCrops: [FMCroppable], forceCropEnabled: Bool) {
+ private var config: FMPhotoPickerConfig
+
+ init(appliedCrop: FMCroppable?, availableCrops: [FMCroppable], config: FMPhotoPickerConfig) {
selectedCrop = appliedCrop
+ self.config = config
var tAvailableCrops = availableCrops
tAvailableCrops = tAvailableCrops.count == 0 ? kDefaultAvailableCrops : tAvailableCrops
// if the force crop mode is enabled
// then only the first crop type in the avaiableCrops will be used
- if forceCropEnabled {
+ if config.forceCropEnabled {
tAvailableCrops = [tAvailableCrops.first!]
}
cropItems = tAvailableCrops
- if forceCropEnabled {
+ if config.forceCropEnabled {
menuItems = [.resetFrameWithoutChangeRatio]
} else {
menuItems = [.resetAll]
@@ -127,7 +130,7 @@ extension FMCropMenuView: UICollectionViewDataSource {
if indexPath.section == 0 {
// menu items
- cell.name.text = menuItems[indexPath.row].name()
+ cell.name.text = menuItems[indexPath.row].name(from: config.strings)
cell.imageView.image = menuItems[indexPath.row].icon()
} else if indexPath.section == 1 {
// crop items
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.swift
index 0901057..ea41bdd 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.swift
@@ -19,6 +19,7 @@ class FMPhotoPresenterViewController: UIViewController {
@IBOutlet weak var numberOfSelectedPhotoContainer: UIView!
@IBOutlet weak var numberOfSelectedPhoto: UILabel!
@IBOutlet weak var determineButton: UIButton!
+ @IBOutlet weak var backButton: UIButton!
// MARK: - Public
public var swipeInteractionController: FMPhotoInteractionAnimator?
@@ -50,7 +51,7 @@ class FMPhotoPresenterViewController: UIViewController {
private lazy var formatter: DateFormatter = {
let formatter = DateFormatter()
- formatter.dateFormat = "yyyy年M月d日"
+ formatter.dateFormat = config.strings["present_title_photo_created_date_format"]
formatter.calendar = Calendar(identifier: .gregorian)
return formatter
}()
@@ -105,7 +106,7 @@ class FMPhotoPresenterViewController: UIViewController {
// Init bottom view
- self.bottomView = FMPresenterBottomView()
+ self.bottomView = FMPresenterBottomView(config: config)
swipeInteractionController = FMPhotoInteractionAnimator(viewController: self)
self.bottomView.touchBegan = { [unowned self] in
@@ -156,6 +157,13 @@ class FMPhotoPresenterViewController: UIViewController {
// in multiple mode done button only appear when at least one image has beem selected
self.determineButton.isHidden = true
}
+
+ // set button title
+ self.backButton.setTitle(config.strings["present_button_back"], for: .normal)
+ self.backButton.titleLabel!.font = UIFont.systemFont(ofSize: config.titleFontSize)
+
+ self.determineButton.setTitle(config.strings["picker_button_select_done"], for: .normal)
+ self.determineButton.titleLabel!.font = UIFont.systemFont(ofSize: config.titleFontSize)
}
override func viewDidAppear(_ animated: Bool) {
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.xib b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.xib
index b542bec..f946c0a 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.xib
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.xib
@@ -12,6 +12,7 @@
+
@@ -38,13 +39,17 @@
-
-
-
-
-
-
-
-
@@ -82,7 +80,7 @@
-
+
-
+
-
-
+
-
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Views/FMPresenterBottomView.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Views/FMPresenterBottomView.swift
index 7a3e79f..3f614c9 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Views/FMPresenterBottomView.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Views/FMPresenterBottomView.swift
@@ -33,9 +33,9 @@ class FMPresenterBottomView: UIView {
fatalError("init(coder:) has not been implemented")
}
- init() {
+ init(config: FMPhotoPickerConfig) {
playbackControlView = FMPlaybackControlView()
- editMenuView = FMPresenterEditMenuView()
+ editMenuView = FMPresenterEditMenuView(config: config)
super.init(frame: .zero)
self.addSubview(playbackControlView)
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Views/FMPresenterEditMenuView.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Views/FMPresenterEditMenuView.swift
index ff1320c..e11652d 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Views/FMPresenterEditMenuView.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Views/FMPresenterEditMenuView.swift
@@ -13,7 +13,7 @@ class FMPresenterEditMenuView: UIView {
public var onTapEditButton: (() -> Void)?
- init() {
+ init(config: FMPhotoPickerConfig) {
editButton = UIButton()
super.init(frame: .zero)
@@ -22,9 +22,11 @@ class FMPresenterEditMenuView: UIView {
editButton.translatesAutoresizingMaskIntoConstraints = false
editButton.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
editButton.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
+ editButton.widthAnchor.constraint(greaterThanOrEqualToConstant: 80).isActive = true
+ editButton.heightAnchor.constraint(greaterThanOrEqualToConstant: 40).isActive = true
editButton.setTitleColor(.black, for: .normal)
- editButton.setTitle("編集", for: .normal)
- editButton.titleLabel?.font = UIFont.systemFont(ofSize: 14, weight: .bold)
+ editButton.setTitle(config.strings["present_button_edit_image"], for: .normal)
+ editButton.titleLabel?.font = UIFont.systemFont(ofSize: config.titleFontSize, weight: .bold)
editButton.addTarget(self, action: #selector(editButtonTarget), for: .touchUpInside)
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Utilities/FMAlertable.swift b/FMPhotoPicker/FMPhotoPicker/source/Utilities/FMAlertable.swift
index d50f329..296bd63 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Utilities/FMAlertable.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Utilities/FMAlertable.swift
@@ -14,10 +14,10 @@ public protocol FMAlertable {
struct FMAlert: FMAlertable {
func show(in viewController: UIViewController, ok: @escaping () -> Void, cancel: @escaping () -> Void) {
- let alert = UIAlertController(title: "編集内容をã‚ャンセルã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ", message: nil, preferredStyle: .alert)
+ let alert = UIAlertController(title: "Are you sure you want to cancel?", message: nil, preferredStyle: .alert)
- alert.addAction(UIAlertAction(title: "ã¯ã„", style: .cancel, handler: { _ in ok() }))
- alert.addAction(UIAlertAction(title: "ã„ã„ãˆ", style: .default, handler: { _ in cancel() }))
+ alert.addAction(UIAlertAction(title: "Yes", style: .cancel, handler: { _ in ok() }))
+ alert.addAction(UIAlertAction(title: "No", style: .default, handler: { _ in cancel() }))
viewController.present(alert, animated: true, completion: nil)
}
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Utilities/FMPhotoPickerConfig.swift b/FMPhotoPicker/FMPhotoPicker/source/Utilities/FMPhotoPickerConfig.swift
index 20d9bb7..baf11ca 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Utilities/FMPhotoPickerConfig.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Utilities/FMPhotoPickerConfig.swift
@@ -54,6 +54,26 @@ public struct FMPhotoPickerConfig {
public var forceCropEnabled = false
public var eclipsePreviewEnabled = false
+ public var titleFontSize: CGFloat = 17
+
+ public var strings: [String: String] = [
+ "picker_button_cancel": "Cancel",
+ "picker_button_select_done": "Done",
+ "picker_warning_over_image_select_format": "You can select maximum %d images",
+ "picker_warning_over_video_select_format": "You can select maximum %d videos",
+
+ "present_title_photo_created_date_format": "yyyy/M/d",
+ "present_button_back": "Back",
+ "present_button_edit_image": "Edit",
+
+ "editor_button_cancel": "Cancel",
+ "editor_button_done": "Done",
+ "editor_menu_filter": "Filter",
+ "editor_menu_crop": "Crop",
+ "editor_menu_crop_button_reset": "Reset",
+ "editor_menu_crop_button_rotate": "Rotate",
+ ]
+
public init() {
}
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Utilities/FMWarningView.swift b/FMPhotoPicker/FMPhotoPicker/source/Utilities/FMWarningView.swift
index d588b57..50b1eb7 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Utilities/FMWarningView.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Utilities/FMWarningView.swift
@@ -50,10 +50,14 @@ class FMWarningView {
self.messageLabel.textColor = .white
self.messageLabel.font = UIFont.systemFont(ofSize: 15)
self.messageLabel.text = self.message
+ self.messageLabel.numberOfLines = 2
+ self.messageLabel.textAlignment = .center
self.contentView.addSubview(self.messageLabel)
- self.messageLabel.centerXAnchor.constraint(equalTo: self.contentView.centerXAnchor, constant: 0).isActive = true
- self.messageLabel.centerYAnchor.constraint(equalTo: self.contentView.centerYAnchor, constant: 0).isActive = true
+ self.messageLabel.topAnchor.constraint(equalTo: self.contentView.topAnchor, constant: 8) .isActive = true
+ self.messageLabel.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor, constant: -8).isActive = true
+ self.messageLabel.leftAnchor.constraint(equalTo: self.contentView.leftAnchor, constant: 8).isActive = true
+ self.messageLabel.rightAnchor.constraint(equalTo: self.contentView.rightAnchor, constant: -8).isActive = true
}
func showAndAutoHide() {
diff --git a/FMPhotoPickerExample/FMPhotoPickerExample/ViewController.swift b/FMPhotoPickerExample/FMPhotoPickerExample/ViewController.swift
index 9baeeeb..7c4329f 100644
--- a/FMPhotoPickerExample/FMPhotoPickerExample/ViewController.swift
+++ b/FMPhotoPickerExample/FMPhotoPickerExample/ViewController.swift
@@ -102,6 +102,26 @@ class ViewController: UIViewController, FMPhotoPickerViewControllerDelegate, FMI
// all available filters will be used
config.availableFilters = []
+ config.titleFontSize = 14
+
+ config.strings = [
+ "picker_button_cancel": "ã‚ャンセル",
+ "picker_button_select_done": "決定",
+ "picker_warning_over_image_select_format": "ç”»åƒã¯æœ€å¤§%d個ã¾ã§é¸æŠžã§ãã¾ã™ã€‚",
+ "picker_warning_over_video_select_format": "å‹•ç”»ã¯æœ€å¤§%d個ã¾ã§é¸æŠžã§ãã¾ã™ã€‚",
+
+ "present_title_photo_created_date_format": "yyyy年M月d日",
+ "present_button_back": "一覧",
+ "present_button_edit_image": "編集",
+
+ "editor_button_cancel": "ã‚ャンセル",
+ "editor_button_done": "決定",
+ "editor_menu_filter": "フィルター",
+ "editor_menu_crop": "調整",
+ "editor_menu_crop_button_reset": "リセット",
+ "editor_menu_crop_button_rotate": "回転",
+ ]
+
return config
}
From b56912007aac5569c9f78184f90cc858b22c897c Mon Sep 17 00:00:00 2001
From: c-nguyen
Date: Tue, 10 Apr 2018 14:54:07 +0900
Subject: [PATCH 2/3] [FIX] layout with safearea issue
---
.../Picker/FMPhotoPickerViewController.swift | 9 ----
.../Picker/FMPhotoPickerViewController.xib | 3 +-
.../Editor/FMImageEditorViewController.swift | 16 +++++-
.../Editor/FMImageEditorViewController.xib | 54 +++++++++++++++----
.../Editor/Views/FMCropMenuView.swift | 7 ++-
.../Editor/Views/FMFiltersMenuView.swift | 3 ++
.../FMPhotoPresenterViewController.swift | 26 +++++----
.../FMPhotoPresenterViewController.xib | 28 +++++++---
8 files changed, 101 insertions(+), 45 deletions(-)
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.swift
index 59bb1de..dacade5 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.swift
@@ -20,7 +20,6 @@ public class FMPhotoPickerViewController: UIViewController {
@IBOutlet weak var numberOfSelectedPhotoContainer: UIView!
@IBOutlet weak var numberOfSelectedPhoto: UILabel!
@IBOutlet weak var determineButton: UIButton!
- @IBOutlet weak var controlBarTopConstrant: NSLayoutConstraint!
@IBOutlet weak var cancelButton: UIButton!
// MARK: - Public
@@ -84,14 +83,6 @@ public class FMPhotoPickerViewController: UIViewController {
self.numberOfSelectedPhotoContainer.isHidden = true
self.determineButton.isHidden = true
- if #available(iOS 11.0, *) {
- guard let window = UIApplication.shared.keyWindow else { return }
- if window.safeAreaInsets.top > 0 {
- // iPhone X
- self.controlBarTopConstrant.constant = 44
- }
- }
-
// set button title
self.cancelButton.setTitle(config.strings["picker_button_cancel"], for: .normal)
self.cancelButton.titleLabel!.font = UIFont.systemFont(ofSize: config.titleFontSize)
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.xib b/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.xib
index 6015c80..38f3064 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.xib
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Picker/FMPhotoPickerViewController.xib
@@ -13,7 +13,6 @@
-
@@ -107,8 +106,8 @@
-
+
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/FMImageEditorViewController.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/FMImageEditorViewController.swift
index 3477427..6481547 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/FMImageEditorViewController.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/FMImageEditorViewController.swift
@@ -18,6 +18,7 @@ public protocol FMImageEditorViewControllerDelegate: class {
public class FMImageEditorViewController: UIViewController {
@IBOutlet weak var topMenuTopConstraint: NSLayoutConstraint!
+ @IBOutlet weak var transparentViewHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var bottomMenuBottomConstraint: NSLayoutConstraint!
@IBOutlet weak var topMenuContainter: UIView!
@IBOutlet weak var bottomMenuContainer: UIView!
@@ -29,6 +30,9 @@ public class FMImageEditorViewController: UIViewController {
@IBOutlet weak var cancelButton: UIButton!
@IBOutlet weak var doneButton: UIButton!
+ @IBOutlet weak var unsafeAreaBottomViewHeightConstraint: NSLayoutConstraint!
+ @IBOutlet weak var unsafeAreaBottomView: UIView!
+
public var didEndEditting: (@escaping () -> Void) -> Void = { _ in }
public var delegate: FMImageEditorViewControllerDelegate?
@@ -252,6 +256,14 @@ public class FMImageEditorViewController: UIViewController {
override public func viewDidLayoutSubviews() {
cropView.frame = view.frame
+
+ if #available(iOS 11.0, *) {
+ transparentViewHeightConstraint.constant = view.safeAreaInsets.top + 44
+
+ unsafeAreaBottomViewHeightConstraint.constant = view.safeAreaInsets.bottom
+ unsafeAreaBottomView.backgroundColor = .white
+ unsafeAreaBottomView.alpha = 0.9
+ }
}
override public func viewDidDisappear(_ animated: Bool) {
@@ -358,7 +370,7 @@ public class FMImageEditorViewController: UIViewController {
self.filterSubMenuView.alpha = 0
},
completion: { _ in
- self.subMenuContainer.backgroundColor = .white
+// self.subMenuContainer.backgroundColor = .white
self.filterSubMenuView.isHidden = true
})
}
@@ -376,7 +388,7 @@ public class FMImageEditorViewController: UIViewController {
self.cropSubMenuView.alpha = 0
},
completion: { _ in
- self.subMenuContainer.backgroundColor = .white
+// self.subMenuContainer.backgroundColor = .white
self.cropSubMenuView.isHidden = true
})
}
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/FMImageEditorViewController.xib b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/FMImageEditorViewController.xib
index 3ea1ad4..09115d1 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/FMImageEditorViewController.xib
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/FMImageEditorViewController.xib
@@ -20,7 +20,10 @@
-
+
+
+
+
@@ -30,14 +33,17 @@
-
+
-
+
+
+
+
-
+
-
+
@@ -133,29 +142,37 @@
-
+
-
+
+
+
+
+
+
+
+
+
@@ -167,22 +184,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/FMCropMenuView.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/FMCropMenuView.swift
index 813edff..0ad2344 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/FMCropMenuView.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/FMCropMenuView.swift
@@ -92,10 +92,9 @@ class FMCropMenuView: UIView {
collectionView.delegate = self
collectionView.showsHorizontalScrollIndicator = false
collectionView.contentInset = UIEdgeInsetsMake(0,14,0,14)
-
-// collectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.old, context: nil)
-
- backgroundColor = .red
+
+ self.backgroundColor = .clear
+ collectionView.backgroundColor = .clear
}
func insert(toView parentView: UIView) {
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/FMFiltersMenuView.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/FMFiltersMenuView.swift
index c18e62a..fa4cd36 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/FMFiltersMenuView.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/Editor/Views/FMFiltersMenuView.swift
@@ -55,6 +55,9 @@ class FMFiltersMenuView: UIView {
collectionView.contentInset = UIEdgeInsetsMake(0,14,0,14)
collectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.old, context: nil)
+
+ self.backgroundColor = .clear
+ collectionView.backgroundColor = .clear
}
func insert(toView parenetView: UIView) {
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.swift b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.swift
index ea41bdd..f254f29 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.swift
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.swift
@@ -15,11 +15,13 @@ class FMPhotoPresenterViewController: UIViewController {
@IBOutlet weak var selectedContainer: UIView!
@IBOutlet weak var selectedIcon: UIImageView!
@IBOutlet weak var selectedIndex: UILabel!
- @IBOutlet weak var controlBarHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var numberOfSelectedPhotoContainer: UIView!
@IBOutlet weak var numberOfSelectedPhoto: UILabel!
@IBOutlet weak var determineButton: UIButton!
@IBOutlet weak var backButton: UIButton!
+ @IBOutlet weak var transparentViewHeightConstraint: NSLayoutConstraint!
+ @IBOutlet weak var unsafeAreaBottomViewHeightConstraint: NSLayoutConstraint!
+ @IBOutlet weak var unsafeAreaBottomView: UIView!
// MARK: - Public
public var swipeInteractionController: FMPhotoInteractionAnimator?
@@ -45,6 +47,8 @@ class FMPhotoPresenterViewController: UIViewController {
private var config: FMPhotoPickerConfig
+ private var bottomViewBottomConstraint: NSLayoutConstraint!
+
private var currentPhotoViewController: FMPhotoViewController? {
return pageViewController.viewControllers?.first as? FMPhotoViewController
}
@@ -88,14 +92,6 @@ class FMPhotoPresenterViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
- if #available(iOS 11.0, *) {
- guard let window = UIApplication.shared.keyWindow else { return }
- if window.safeAreaInsets.top > 0 {
- // iPhone X
- self.controlBarHeightConstraint.constant = 88
- }
- }
-
self.selectedContainer.layer.cornerRadius = self.selectedContainer.frame.size.width / 2
self.updateInfoBar()
@@ -137,7 +133,8 @@ class FMPhotoPresenterViewController: UIViewController {
self.bottomView.translatesAutoresizingMaskIntoConstraints = false
self.bottomView.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
self.bottomView.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true
- self.bottomView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
+ bottomViewBottomConstraint = self.bottomView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
+ bottomViewBottomConstraint.isActive = true
self.bottomView.heightAnchor.constraint(equalToConstant: 90).isActive = true
self.pageViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
@@ -175,6 +172,15 @@ class FMPhotoPresenterViewController: UIViewController {
override func viewDidLayoutSubviews() {
bottomView.updateFrames()
+
+ if #available(iOS 11.0, *) {
+ transparentViewHeightConstraint.constant = view.safeAreaInsets.top + 44 // 44 is the height of nav bar
+ bottomViewBottomConstraint.constant = -view.safeAreaInsets.bottom
+
+ unsafeAreaBottomViewHeightConstraint.constant = view.safeAreaInsets.bottom
+ unsafeAreaBottomView.backgroundColor = .white
+ unsafeAreaBottomView.alpha = 0.9
+ }
}
override func didReceiveMemoryWarning() {
diff --git a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.xib b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.xib
index f946c0a..4f0c972 100644
--- a/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.xib
+++ b/FMPhotoPicker/FMPhotoPicker/source/Scene/Presenter/FMPhotoPresenterViewController.xib
@@ -13,7 +13,6 @@
-
@@ -21,6 +20,9 @@
+
+
+
@@ -30,14 +32,17 @@
-
+
-
+
+
+
+
-
+