From 702831e9c6da32f3fd2517c8b319307d004f501b Mon Sep 17 00:00:00 2001 From: ellyheetov Date: Thu, 10 Jun 2021 18:18:02 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20ImagePicker=20=E1=84=8F=E1=85=B3?= =?UTF-8?q?=E1=86=AF=E1=84=85=E1=85=A2=E1=84=89=E1=85=B3=20=E1=84=89?= =?UTF-8?q?=E1=85=A2=E1=86=BC=E1=84=89=E1=85=A5=E1=86=BC=20=E1=84=86?= =?UTF-8?q?=E1=85=B5=E1=86=BE=20UIImagePickerController=20=E1=84=89?= =?UTF-8?q?=E1=85=A1=E1=84=8B=E1=85=AD=E1=86=BC=20(#27)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iOS/issue-tracker.xcodeproj/project.pbxproj | 8 +-- iOS/issue-tracker/Base.lproj/Main.storyboard | 61 ------------------- .../NewIssue/IssueEditViewController.swift | 16 +++-- iOS/issue-tracker/Photo/ImagePicker.swift | 58 ++++++++++++++++++ .../Photo/PhotoViewController.swift | 50 --------------- 5 files changed, 73 insertions(+), 120 deletions(-) create mode 100644 iOS/issue-tracker/Photo/ImagePicker.swift delete mode 100644 iOS/issue-tracker/Photo/PhotoViewController.swift diff --git a/iOS/issue-tracker.xcodeproj/project.pbxproj b/iOS/issue-tracker.xcodeproj/project.pbxproj index 1781a8ea0..f9b99f123 100644 --- a/iOS/issue-tracker.xcodeproj/project.pbxproj +++ b/iOS/issue-tracker.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 10992D55267200F000A77322 /* ImagePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10992D54267200F000A77322 /* ImagePicker.swift */; }; 10BCA8A5266F38E800DBBA61 /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10BCA8A4266F38E800DBBA61 /* LoginViewController.swift */; }; 10BCA8AA266F3C8100DBBA61 /* Montserrat-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 10BCA8A9266F3C7A00DBBA61 /* Montserrat-Italic.ttf */; }; 10BDE6B52670C324007B38AF /* IssueEditViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10BDE6B42670C324007B38AF /* IssueEditViewController.swift */; }; @@ -23,7 +24,6 @@ 10D55EDF2670D46E007587C4 /* AdditionalTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 10D55EDD2670D46E007587C4 /* AdditionalTableViewCell.xib */; }; 10D55EE12670D512007587C4 /* AdditionalTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10D55EE02670D512007587C4 /* AdditionalTableViewDataSource.swift */; }; 10D55EE32670D717007587C4 /* AdditionalTableDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10D55EE22670D717007587C4 /* AdditionalTableDelegate.swift */; }; - 10ED3B802671C21600FCBF2E /* PhotoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10ED3B7F2671C21600FCBF2E /* PhotoViewController.swift */; }; 10ED3B842671C31500FCBF2E /* PhotoDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10ED3B832671C31500FCBF2E /* PhotoDataSource.swift */; }; 10ED3B862671C34200FCBF2E /* PhotoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10ED3B852671C34200FCBF2E /* PhotoManager.swift */; }; 10ED3B8C2671C41B00FCBF2E /* PhotoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10ED3B8B2671C41B00FCBF2E /* PhotoCell.swift */; }; @@ -31,6 +31,7 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 10992D54267200F000A77322 /* ImagePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImagePicker.swift; sourceTree = ""; }; 10BCA8A4266F38E800DBBA61 /* LoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = ""; }; 10BCA8A9266F3C7A00DBBA61 /* Montserrat-Italic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-Italic.ttf"; sourceTree = ""; }; 10BDE6B42670C324007B38AF /* IssueEditViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IssueEditViewController.swift; sourceTree = ""; }; @@ -50,7 +51,6 @@ 10D55EDD2670D46E007587C4 /* AdditionalTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AdditionalTableViewCell.xib; sourceTree = ""; }; 10D55EE02670D512007587C4 /* AdditionalTableViewDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionalTableViewDataSource.swift; sourceTree = ""; }; 10D55EE22670D717007587C4 /* AdditionalTableDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionalTableDelegate.swift; sourceTree = ""; }; - 10ED3B7F2671C21600FCBF2E /* PhotoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoViewController.swift; sourceTree = ""; }; 10ED3B832671C31500FCBF2E /* PhotoDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoDataSource.swift; sourceTree = ""; }; 10ED3B852671C34200FCBF2E /* PhotoManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoManager.swift; sourceTree = ""; }; 10ED3B8B2671C41B00FCBF2E /* PhotoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoCell.swift; sourceTree = ""; }; @@ -166,10 +166,10 @@ 10ED3B7E2671C1F600FCBF2E /* Photo */ = { isa = PBXGroup; children = ( - 10ED3B7F2671C21600FCBF2E /* PhotoViewController.swift */, 10ED3B832671C31500FCBF2E /* PhotoDataSource.swift */, 10ED3B852671C34200FCBF2E /* PhotoManager.swift */, 10ED3B8B2671C41B00FCBF2E /* PhotoCell.swift */, + 10992D54267200F000A77322 /* ImagePicker.swift */, ); path = Photo; sourceTree = ""; @@ -315,7 +315,7 @@ 10CE4D9E266EFB5700FBD593 /* ViewController.swift in Sources */, 10D4258226709CC200AE119C /* IssueListViewController.swift in Sources */, 10BDE6B92670C62A007B38AF /* IdentityProtocol.swift in Sources */, - 10ED3B802671C21600FCBF2E /* PhotoViewController.swift in Sources */, + 10992D55267200F000A77322 /* ImagePicker.swift in Sources */, 10CE4D9A266EFB5700FBD593 /* AppDelegate.swift in Sources */, 10CE4D9C266EFB5700FBD593 /* SceneDelegate.swift in Sources */, 10D55EE32670D717007587C4 /* AdditionalTableDelegate.swift in Sources */, diff --git a/iOS/issue-tracker/Base.lproj/Main.storyboard b/iOS/issue-tracker/Base.lproj/Main.storyboard index 683ceb83f..d19eb4f9a 100644 --- a/iOS/issue-tracker/Base.lproj/Main.storyboard +++ b/iOS/issue-tracker/Base.lproj/Main.storyboard @@ -5,7 +5,6 @@ - @@ -195,66 +194,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iOS/issue-tracker/NewIssue/IssueEditViewController.swift b/iOS/issue-tracker/NewIssue/IssueEditViewController.swift index 07ff728bd..478b8d553 100644 --- a/iOS/issue-tracker/NewIssue/IssueEditViewController.swift +++ b/iOS/issue-tracker/NewIssue/IssueEditViewController.swift @@ -15,6 +15,8 @@ class IssueEditViewController: UIViewController { private var tableDelegate = AdditionalTableDelegate() private var tableDataSource = AdditionalTableViewDataSource() + private lazy var photoPicker = ImagePicker(presentationController: self, delegate: self) + override func viewDidLoad() { super.viewDidLoad() @@ -39,12 +41,9 @@ class IssueEditViewController: UIViewController { @objc func insertPhoto(){ - let photoSelectViewController = PhotoViewController - .instantiate(name: "Main", bundle: Bundle.main) - let navigationVC = UINavigationController(rootViewController: photoSelectViewController) - navigationVC.title = "사진" - self.present(navigationVC, animated: true) + self.photoPicker.present() } + } extension IssueEditViewController: UITextViewDelegate { @@ -53,3 +52,10 @@ extension IssueEditViewController: UITextViewDelegate { UIMenuController.shared.menuItems = [menuItem] } } + +extension IssueEditViewController: ImagePickerDelegate { + + func didSelect(image: UIImage?) { + + } +} diff --git a/iOS/issue-tracker/Photo/ImagePicker.swift b/iOS/issue-tracker/Photo/ImagePicker.swift new file mode 100644 index 000000000..28cd56c8b --- /dev/null +++ b/iOS/issue-tracker/Photo/ImagePicker.swift @@ -0,0 +1,58 @@ +// +// PhotoPicker.swift +// issue-tracker +// +// Created by 박혜원 on 2021/06/10. +// + +import UIKit + +public protocol ImagePickerDelegate: AnyObject { + func didSelect(image: UIImage?) +} +class ImagePicker: NSObject { + + private let pickerController: UIImagePickerController + private weak var presentationController: UIViewController? + private weak var delegate: ImagePickerDelegate? + + public init(presentationController: UIViewController, delegate: ImagePickerDelegate) { + self.pickerController = UIImagePickerController() + + super.init() + self.presentationController = presentationController + self.delegate = delegate + + self.pickerController.delegate = self + self.pickerController.allowsEditing = true + self.pickerController.mediaTypes = ["public.image"] + + } + + private func pickerController(_ controller: UIImagePickerController, didSelect image: UIImage?) { + controller.dismiss(animated: true, completion: nil) + self.delegate?.didSelect(image: image) + } + + func present(){ + self.presentationController?.present(pickerController, animated: true) + } +} + +extension ImagePicker: UIImagePickerControllerDelegate { + + func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { + self.pickerController(picker, didSelect: nil) + } + + func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { + guard let image = info[.editedImage] as? UIImage else { + return self.pickerController(picker, didSelect: nil) + } + self.pickerController(picker, didSelect: image) + } +} + +extension ImagePicker: UINavigationControllerDelegate { + +} diff --git a/iOS/issue-tracker/Photo/PhotoViewController.swift b/iOS/issue-tracker/Photo/PhotoViewController.swift deleted file mode 100644 index cd04d3a1e..000000000 --- a/iOS/issue-tracker/Photo/PhotoViewController.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// PhotoViewController.swift -// issue-tracker -// -// Created by 박혜원 on 2021/06/10. -// - -import UIKit - -class PhotoViewController: UIViewController, ReuseIdentity { - - @IBOutlet weak var album: UICollectionView! - - private var photoDataSource = PhotoDataSource() - - override func viewDidLoad() { - super.viewDidLoad() - configureNavigationItem() - - PhotoManager.shared.requestPhotos() - PhotoManager.shared.authorization() - - self.album.dataSource = photoDataSource - - self.album.reloadData() - } - - private func configureNavigationItem(){ - let rightButton = UIBarButtonItem(title: "추가", - style: .done, - target: self, - action: #selector(addPhotoToTextView)) - let leftButton = UIBarButtonItem(title: "취소", - style: .done, - target: self, - action: #selector(dismissPhotoAlbum)) - - self.navigationItem.rightBarButtonItem = rightButton - self.navigationItem.leftBarButtonItem = leftButton - } - - @objc - func addPhotoToTextView(){ - - } - @objc - func dismissPhotoAlbum(){ - self.presentingViewController?.dismiss(animated: true) - } -}