Skip to content

Commit

Permalink
feat: ImagePicker 클래스 생성 및 UIImagePickerController 사용 (#27)
Browse files Browse the repository at this point in the history
  • Loading branch information
ellyheetov committed Jun 10, 2021
1 parent 7e267e8 commit 702831e
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 120 deletions.
8 changes: 4 additions & 4 deletions iOS/issue-tracker.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -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 */; };
Expand All @@ -23,14 +24,14 @@
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 */; };
BCCEBE1E1668EC814AFFBE24 /* Pods_issue_tracker.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 906455FA7C42AB9BB530CE77 /* Pods_issue_tracker.framework */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
10992D54267200F000A77322 /* ImagePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImagePicker.swift; sourceTree = "<group>"; };
10BCA8A4266F38E800DBBA61 /* LoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = "<group>"; };
10BCA8A9266F3C7A00DBBA61 /* Montserrat-Italic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Montserrat-Italic.ttf"; sourceTree = "<group>"; };
10BDE6B42670C324007B38AF /* IssueEditViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IssueEditViewController.swift; sourceTree = "<group>"; };
Expand All @@ -50,7 +51,6 @@
10D55EDD2670D46E007587C4 /* AdditionalTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AdditionalTableViewCell.xib; sourceTree = "<group>"; };
10D55EE02670D512007587C4 /* AdditionalTableViewDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionalTableViewDataSource.swift; sourceTree = "<group>"; };
10D55EE22670D717007587C4 /* AdditionalTableDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdditionalTableDelegate.swift; sourceTree = "<group>"; };
10ED3B7F2671C21600FCBF2E /* PhotoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoViewController.swift; sourceTree = "<group>"; };
10ED3B832671C31500FCBF2E /* PhotoDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoDataSource.swift; sourceTree = "<group>"; };
10ED3B852671C34200FCBF2E /* PhotoManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoManager.swift; sourceTree = "<group>"; };
10ED3B8B2671C41B00FCBF2E /* PhotoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoCell.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -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 = "<group>";
Expand Down Expand Up @@ -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 */,
Expand Down
61 changes: 0 additions & 61 deletions iOS/issue-tracker/Base.lproj/Main.storyboard
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="18093"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="collection view cell content view" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<customFonts key="customFonts">
Expand Down Expand Up @@ -195,66 +194,6 @@
</objects>
<point key="canvasLocation" x="1900.0000000000002" y="130.58035714285714"/>
</scene>
<!--Photo View Controller-->
<scene sceneID="Qhn-EN-AA6">
<objects>
<viewController storyboardIdentifier="PhotoViewController" id="3i5-Tr-59N" customClass="PhotoViewController" customModule="issue_tracker" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="0uT-yf-zTm">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="jN3-VD-35R">
<rect key="frame" x="0.0" y="44" width="414" height="818"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="OHb-jT-NpV">
<size key="itemSize" width="128" height="128"/>
<size key="headerReferenceSize" width="0.0" height="0.0"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<cells>
<collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="PhotoCell" id="MVx-rW-jh6" customClass="PhotoCell" customModule="issue_tracker" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="128" height="128"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<collectionViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" id="CGq-6B-cGF">
<rect key="frame" x="0.0" y="0.0" width="128" height="128"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Lyh-m7-fez">
<rect key="frame" x="0.0" y="0.0" width="128" height="128"/>
</imageView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="Lyh-m7-fez" secondAttribute="trailing" id="Js3-GB-4Ze"/>
<constraint firstAttribute="bottom" secondItem="Lyh-m7-fez" secondAttribute="bottom" id="bhZ-a7-DYP"/>
<constraint firstItem="Lyh-m7-fez" firstAttribute="top" secondItem="CGq-6B-cGF" secondAttribute="top" id="g0M-kj-wFK"/>
<constraint firstItem="Lyh-m7-fez" firstAttribute="leading" secondItem="CGq-6B-cGF" secondAttribute="leading" id="rFc-8Q-OTB"/>
</constraints>
</collectionViewCellContentView>
<connections>
<outlet property="photo" destination="Lyh-m7-fez" id="3dg-Me-A3I"/>
</connections>
</collectionViewCell>
</cells>
</collectionView>
</subviews>
<viewLayoutGuide key="safeArea" id="Ncf-vT-f03"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="jN3-VD-35R" firstAttribute="leading" secondItem="Ncf-vT-f03" secondAttribute="leading" id="8Oo-Wj-q91"/>
<constraint firstItem="Ncf-vT-f03" firstAttribute="trailing" secondItem="jN3-VD-35R" secondAttribute="trailing" id="HAH-bg-FYy"/>
<constraint firstItem="Ncf-vT-f03" firstAttribute="bottom" secondItem="jN3-VD-35R" secondAttribute="bottom" id="k0r-7B-UU9"/>
<constraint firstItem="jN3-VD-35R" firstAttribute="top" secondItem="Ncf-vT-f03" secondAttribute="top" id="xHd-rb-LO0"/>
</constraints>
</view>
<connections>
<outlet property="album" destination="jN3-VD-35R" id="nM8-Rh-O8y"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="G5K-mW-iKV" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2746" y="131"/>
</scene>
</scenes>
<resources>
<systemColor name="labelColor">
Expand Down
16 changes: 11 additions & 5 deletions iOS/issue-tracker/NewIssue/IssueEditViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand All @@ -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 {

Expand All @@ -53,3 +52,10 @@ extension IssueEditViewController: UITextViewDelegate {
UIMenuController.shared.menuItems = [menuItem]
}
}

extension IssueEditViewController: ImagePickerDelegate {

func didSelect(image: UIImage?) {

}
}
58 changes: 58 additions & 0 deletions iOS/issue-tracker/Photo/ImagePicker.swift
Original file line number Diff line number Diff line change
@@ -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 {

}
50 changes: 0 additions & 50 deletions iOS/issue-tracker/Photo/PhotoViewController.swift

This file was deleted.

0 comments on commit 702831e

Please sign in to comment.