diff --git a/NADA-iOS-forRelease.xcodeproj/project.pbxproj b/NADA-iOS-forRelease.xcodeproj/project.pbxproj index 3a490c82..190710c5 100644 --- a/NADA-iOS-forRelease.xcodeproj/project.pbxproj +++ b/NADA-iOS-forRelease.xcodeproj/project.pbxproj @@ -52,13 +52,20 @@ 39F5A3D0271461EA00191F94 /* BackCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39F5A3CE271461EA00191F94 /* BackCardCell.swift */; }; 39F5A3D1271461EA00191F94 /* BackCardCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 39F5A3CF271461EA00191F94 /* BackCardCell.xib */; }; 7729171F2743D604001593E0 /* CardsInGroupResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7729171E2743D604001593E0 /* CardsInGroupResponse.swift */; }; + 77607EDA274A68BE00204CD2 /* GroupCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77607ED8274A68BD00204CD2 /* GroupCollectionViewCell.swift */; }; + 77607EDB274A68BE00204CD2 /* GroupCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 77607ED9274A68BD00204CD2 /* GroupCollectionViewCell.xib */; }; + 7766A40F274FEBE200714912 /* CardInGroupCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7766A40D274FEBE200714912 /* CardInGroupCollectionViewCell.swift */; }; + 7766A410274FEBE200714912 /* CardInGroupCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7766A40E274FEBE200714912 /* CardInGroupCollectionViewCell.xib */; }; + 77703157275005AA002CBD19 /* CardResultBottomSheetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77703156275005AA002CBD19 /* CardResultBottomSheetViewController.swift */; }; + 7770315927500C49002CBD19 /* QRScan.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7770315827500C49002CBD19 /* QRScan.storyboard */; }; + 7770315B27500C7B002CBD19 /* QRScanViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7770315A27500C7B002CBD19 /* QRScanViewController.swift */; }; 777FF89B27359B7800BF69D3 /* Groups.swift in Sources */ = {isa = PBXBuildFile; fileRef = 777FF89A27359B7800BF69D3 /* Groups.swift */; }; 777FF89D2735B16B00BF69D3 /* GroupAddRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 777FF89C2735B16B00BF69D3 /* GroupAddRequest.swift */; }; 777FF89F27364B7B00BF69D3 /* GroupEditRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 777FF89E27364B7B00BF69D3 /* GroupEditRequest.swift */; }; 77AA68EA273E0EC4009C89B0 /* CardAddInGroupRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77AA68E9273E0EC4009C89B0 /* CardAddInGroupRequest.swift */; }; + 77DFB871274F92F9000CD36F /* AddWithIdBottomSheetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77DFB870274F92F9000CD36F /* AddWithIdBottomSheetViewController.swift */; }; DBBB91E1639641F40C5B4416 /* Pods_NADA_iOS_forRelease.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A2183AE0E469153221624A0 /* Pods_NADA_iOS_forRelease.framework */; }; F811720027383097002742CF /* ChangeGroupRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F81171FF27383097002742CF /* ChangeGroupRequest.swift */; }; - F81A6833274F49A700B80A4F /* UITextField+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F81A6832274F49A700B80A4F /* UITextField+Extension.swift */; }; F822E7A92709CEB60020452C /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = F822E7A82709CEB60020452C /* Notification.swift */; }; F82FF81D2701EBCE00E57F8B /* CardCreation.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F82FF81C2701EBCE00E57F8B /* CardCreation.storyboard */; }; F82FF8252702000000E57F8B /* RequiredFlavorCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82FF8232702000000E57F8B /* RequiredFlavorCollectionViewCell.swift */; }; @@ -152,10 +159,18 @@ 39F5A3CF271461EA00191F94 /* BackCardCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BackCardCell.xib; sourceTree = ""; }; 4A2183AE0E469153221624A0 /* Pods_NADA_iOS_forRelease.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NADA_iOS_forRelease.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7729171E2743D604001593E0 /* CardsInGroupResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardsInGroupResponse.swift; sourceTree = ""; }; + 77607ED8274A68BD00204CD2 /* GroupCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupCollectionViewCell.swift; sourceTree = ""; }; + 77607ED9274A68BD00204CD2 /* GroupCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GroupCollectionViewCell.xib; sourceTree = ""; }; + 7766A40D274FEBE200714912 /* CardInGroupCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardInGroupCollectionViewCell.swift; sourceTree = ""; }; + 7766A40E274FEBE200714912 /* CardInGroupCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CardInGroupCollectionViewCell.xib; sourceTree = ""; }; + 77703156275005AA002CBD19 /* CardResultBottomSheetViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardResultBottomSheetViewController.swift; sourceTree = ""; }; + 7770315827500C49002CBD19 /* QRScan.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = QRScan.storyboard; sourceTree = ""; }; + 7770315A27500C7B002CBD19 /* QRScanViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRScanViewController.swift; sourceTree = ""; }; 777FF89A27359B7800BF69D3 /* Groups.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Groups.swift; sourceTree = ""; }; 777FF89C2735B16B00BF69D3 /* GroupAddRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupAddRequest.swift; sourceTree = ""; }; 777FF89E27364B7B00BF69D3 /* GroupEditRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupEditRequest.swift; sourceTree = ""; }; 77AA68E9273E0EC4009C89B0 /* CardAddInGroupRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardAddInGroupRequest.swift; sourceTree = ""; }; + 77DFB870274F92F9000CD36F /* AddWithIdBottomSheetViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddWithIdBottomSheetViewController.swift; sourceTree = ""; }; 7F4EE1D042EC783FA8528743 /* Pods-NADA-iOS-forRelease.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NADA-iOS-forRelease.debug.xcconfig"; path = "Target Support Files/Pods-NADA-iOS-forRelease/Pods-NADA-iOS-forRelease.debug.xcconfig"; sourceTree = ""; }; F81171FF27383097002742CF /* ChangeGroupRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeGroupRequest.swift; sourceTree = ""; }; F81A6832274F49A700B80A4F /* UITextField+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITextField+Extension.swift"; sourceTree = ""; }; @@ -298,6 +313,7 @@ isa = PBXGroup; children = ( 3958F238270FFBBF00B100B2 /* GroupViewController.swift */, + 7770315A27500C7B002CBD19 /* QRScanViewController.swift */, ); path = Group; sourceTree = ""; @@ -307,6 +323,7 @@ children = ( 3958F23B270FFBD500B100B2 /* Group.storyboard */, 3936993A274A53C600684420 /* GroupEdit.storyboard */, + 7770315827500C49002CBD19 /* QRScan.storyboard */, ); path = Group; sourceTree = ""; @@ -356,7 +373,9 @@ isa = PBXGroup; children = ( 39D88B6A274600B100A72164 /* CommonBottomSheetViewController.swift */, + 77DFB870274F92F9000CD36F /* AddWithIdBottomSheetViewController.swift */, 398413B6274A7A1E005550BC /* AddGroupBottomSheetViewController.swift */, + 77703156275005AA002CBD19 /* CardResultBottomSheetViewController.swift */, ); path = BottomSheet; sourceTree = ""; @@ -381,6 +400,17 @@ name = Frameworks; sourceTree = ""; }; + 77607ED7274A689300204CD2 /* GroupCell */ = { + isa = PBXGroup; + children = ( + 77607ED8274A68BD00204CD2 /* GroupCollectionViewCell.swift */, + 77607ED9274A68BD00204CD2 /* GroupCollectionViewCell.xib */, + 7766A40D274FEBE200714912 /* CardInGroupCollectionViewCell.swift */, + 7766A40E274FEBE200714912 /* CardInGroupCollectionViewCell.xib */, + ); + path = GroupCell; + sourceTree = ""; + }; 777FF89927359B1000BF69D3 /* Group */ = { isa = PBXGroup; children = ( @@ -603,6 +633,7 @@ isa = PBXGroup; children = ( 3936993F274A565E00684420 /* GroupEdit */, + 77607ED7274A689300204CD2 /* GroupCell */, 392F7FB1274621CF008CDBF5 /* MoreList */, F84BAFA126FDB4E5004CA335 /* CreationCard */, 39523E582701A47400536900 /* CardList */, @@ -777,6 +808,7 @@ files = ( F8FC43BF26C025180033E151 /* .swiftlint.yml in Resources */, F85711A7274A6B3400F59F0B /* CardCreationPreview.storyboard in Resources */, + 77607EDB274A68BE00204CD2 /* GroupCollectionViewCell.xib in Resources */, 39369936274A4FCB00684420 /* NotoSansCJKkr-Regular.otf in Resources */, 39369935274A4FCB00684420 /* NotoSansCJKkr-Bold.otf in Resources */, 39D88B622745FBA900A72164 /* More.storyboard in Resources */, @@ -791,6 +823,7 @@ F84BAFB226FDB552004CA335 /* BackCardCreationCollectionViewCell.xib in Resources */, 3936993B274A53C600684420 /* GroupEdit.storyboard in Resources */, 39D88B642745FDD400A72164 /* TabBar.storyboard in Resources */, + 7766A410274FEBE200714912 /* CardInGroupCollectionViewCell.xib in Resources */, 39523E5C2701A48900536900 /* CardListTableViewCell.xib in Resources */, F8FC439226C01CDE0033E151 /* LaunchScreen.storyboard in Resources */, F8FC438F26C01CDE0033E151 /* Assets.xcassets in Resources */, @@ -801,6 +834,7 @@ F82FF81D2701EBCE00E57F8B /* CardCreation.storyboard in Resources */, 39369937274A4FCB00684420 /* NotoSansCJKkr-Medium.otf in Resources */, 392F7FB5274621F1008CDBF5 /* MoreListTableViewCell.xib in Resources */, + 7770315927500C49002CBD19 /* QRScan.storyboard in Resources */, 390515B82706CEBB00C5F7A5 /* Colors.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -877,6 +911,7 @@ F858079E2700354E00872484 /* BackgroundCollectionViewCell.swift in Sources */, F8C83FBD272F9F430009DF0D /* GenericResponse.swift in Sources */, 398413B7274A7A1E005550BC /* AddGroupBottomSheetViewController.swift in Sources */, + 77DFB871274F92F9000CD36F /* AddWithIdBottomSheetViewController.swift in Sources */, 39007F2C27080D8200E7143E /* UIViewController+Extension.swift in Sources */, F8C83FB6272F9E380009DF0D /* UtilService.swift in Sources */, 3958F239270FFBBF00B100B2 /* GroupViewController.swift in Sources */, @@ -902,6 +937,7 @@ F82FF8252702000000E57F8B /* RequiredFlavorCollectionViewCell.swift in Sources */, F8C83FC7272FA2A20009DF0D /* CardService.swift in Sources */, 39D88B662745FE5F00A72164 /* TabBarViewController.swift in Sources */, + 77607EDA274A68BE00204CD2 /* GroupCollectionViewCell.swift in Sources */, F871227827330A3800A24E74 /* CardCreationRequest.swift in Sources */, 39D88B5F2745FB7E00A72164 /* MoreViewController.swift in Sources */, F8FC43B326C020B90033E151 /* BackCardCreationDelegate.swift in Sources */, @@ -910,6 +946,7 @@ F8FC43B526C020C10033E151 /* TempViews.swift in Sources */, F8C83FBB272F9F370009DF0D /* NetworkResult.swift in Sources */, 39D2E130270B43DA00AD0889 /* UIFont+Extension.swift in Sources */, + 7770315B27500C7B002CBD19 /* QRScanViewController.swift in Sources */, 39523E5B2701A48900536900 /* CardListTableViewCell.swift in Sources */, F8A9FE1A2743DC6B00BC60CE /* CardListInGroupRequest.swift in Sources */, 3981148E273BEBB300E28630 /* CardListEditRequest.swift in Sources */, @@ -922,12 +959,14 @@ 39811490273BEBCE00E28630 /* CardListRequest.swift in Sources */, F8FC43BC26C022A20033E151 /* Storyboard.swift in Sources */, F8C83FC1272FA06E0009DF0D /* UserAPI.swift in Sources */, + 7766A40F274FEBE200714912 /* CardInGroupCollectionViewCell.swift in Sources */, F8C83FC3272FA17B0009DF0D /* URL.swift in Sources */, 392F7FB4274621F1008CDBF5 /* MoreListTableViewCell.swift in Sources */, 77AA68EA273E0EC4009C89B0 /* CardAddInGroupRequest.swift in Sources */, 3936993E274A53E000684420 /* GroupEditViewController.swift in Sources */, F8C83FAE272F99940009DF0D /* MoyaLoggerPlugin.swift in Sources */, F84BAFAD26FDB543004CA335 /* FrontCardCreationCollectionViewCell.swift in Sources */, + 77703157275005AA002CBD19 /* CardResultBottomSheetViewController.swift in Sources */, 39D13565273FDB9C00B1A148 /* User.swift in Sources */, F822E7A92709CEB60020452C /* Notification.swift in Sources */, F8C83FC5272FA2940009DF0D /* CardAPI.swift in Sources */, diff --git a/NADA-iOS-forRelease/Resouces/Constants/Storyboard.swift b/NADA-iOS-forRelease/Resouces/Constants/Storyboard.swift index 76a33675..d9f768ca 100644 --- a/NADA-iOS-forRelease/Resouces/Constants/Storyboard.swift +++ b/NADA-iOS-forRelease/Resouces/Constants/Storyboard.swift @@ -17,6 +17,7 @@ extension Const { static let front = "Front" static let group = "Group" static let groupEdit = "GroupEdit" + static let qrScan = "QRScan" static let tabBar = "TabBar" static let cardCreationPreview = "CardCreationPreview" static let more = "More" diff --git a/NADA-iOS-forRelease/Resouces/Constants/ViewController.swift b/NADA-iOS-forRelease/Resouces/Constants/ViewController.swift index 89e82b9a..13878dfb 100644 --- a/NADA-iOS-forRelease/Resouces/Constants/ViewController.swift +++ b/NADA-iOS-forRelease/Resouces/Constants/ViewController.swift @@ -17,10 +17,13 @@ extension Const { static let frontViewController = "FrontViewController" static let groupViewController = "GroupViewController" static let groupEditViewController = "GroupEditViewController" + static let qrScanViewController = "QRScanViewController" static let tabBarViewController = "TabBarViewController" static let commonBottomSheetViewController = "CommonBottomSheetViewController" static let cardCreationPreviewViewController = "CardCreationPreviewViewController" static let addGroupBottomSheetViewController = "AddGroupBottomSheetViewController" + static let addWithIdBottomSheetViewController = "AddWithIdBottomSheetViewController" + static let cardResultBottomSheetViewController = "CardResultBottomSheetViewController" static let moreViewController = "MoreViewController" } } diff --git a/NADA-iOS-forRelease/Resouces/Constants/Xib.swift b/NADA-iOS-forRelease/Resouces/Constants/Xib.swift index 9c536cc3..6eb1ccc9 100644 --- a/NADA-iOS-forRelease/Resouces/Constants/Xib.swift +++ b/NADA-iOS-forRelease/Resouces/Constants/Xib.swift @@ -16,6 +16,8 @@ extension Const { static let frontCardCell = "FrontCardCell" static let backCardCell = "BackCardCell" static let backgroundCollectionViewCell = "BackgroundCollectionViewCell" + static let groupCollectionViewCell = "GroupCollectionViewCell" + static let cardInGroupCollectionViewCell = "CardInGroupCollectionViewCell" static let groupEditTableViewCell = "GroupEditTableViewCell" static let moreListTableViewCell = "MoreListTableViewCell" } diff --git a/NADA-iOS-forRelease/Resouces/Storyboards/Group/Group.storyboard b/NADA-iOS-forRelease/Resouces/Storyboards/Group/Group.storyboard index 0f4ddc03..3219b7f0 100644 --- a/NADA-iOS-forRelease/Resouces/Storyboards/Group/Group.storyboard +++ b/NADA-iOS-forRelease/Resouces/Storyboards/Group/Group.storyboard @@ -1,13 +1,20 @@ - + - + + + + + + SpoqaHanSansNeo-Bold + + @@ -16,22 +23,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NADA-iOS-forRelease/Resouces/Storyboards/Group/QRScan.storyboard b/NADA-iOS-forRelease/Resouces/Storyboards/Group/QRScan.storyboard new file mode 100644 index 00000000..0e18fd7f --- /dev/null +++ b/NADA-iOS-forRelease/Resouces/Storyboards/Group/QRScan.storyboard @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.swift b/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.swift new file mode 100644 index 00000000..687a8ddc --- /dev/null +++ b/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.swift @@ -0,0 +1,38 @@ +// +// CardInGroupCollectionViewCell.swift +// NADA-iOS-forRelease +// +// Created by Yi Joon Choi on 2021/11/26. +// + +import UIKit + +class CardInGroupCollectionViewCell: UICollectionViewCell { + + @IBOutlet weak var backgroundImageView: UIImageView! + @IBOutlet weak var titleLabel: UILabel! + @IBOutlet weak var descriptionLabel: UILabel! + @IBOutlet weak var userNameLabel: UILabel! + @IBOutlet weak var birthLabel: UILabel! + @IBOutlet weak var mbtiLabel: UILabel! + + @IBOutlet weak var instagramIDLabel: UILabel! + @IBOutlet weak var lineURLLabel: UILabel! + + override func awakeFromNib() { + super.awakeFromNib() + setUI() + } + + static func nib() -> UINib { + return UINib(nibName: "CardInGroupCollectionViewCell", bundle: Bundle(for: CardInGroupCollectionViewCell.self)) + } + +} + +extension CardInGroupCollectionViewCell { + private func setUI() { + +// backgroundImageView.alpha = 0.4 + } +} diff --git a/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.xib b/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.xib new file mode 100644 index 00000000..11a841f0 --- /dev/null +++ b/NADA-iOS-forRelease/Sources/Cells/GroupCell/CardInGroupCollectionViewCell.xib @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + SpoqaHanSansNeo-Bold + + + SpoqaHanSansNeo-Regular + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NADA-iOS-forRelease/Sources/Cells/GroupCell/GroupCollectionViewCell.swift b/NADA-iOS-forRelease/Sources/Cells/GroupCell/GroupCollectionViewCell.swift new file mode 100644 index 00000000..923e4868 --- /dev/null +++ b/NADA-iOS-forRelease/Sources/Cells/GroupCell/GroupCollectionViewCell.swift @@ -0,0 +1,41 @@ +// +// GroupCollectionViewCell.swift +// NADA-iOS-forRelease +// +// Created by Yi Joon Choi on 2021/11/21. +// + +import UIKit + +class GroupCollectionViewCell: UICollectionViewCell { + + // MARK: - @IBOutlet Properties + @IBOutlet weak var groupBackground: UIView! + @IBOutlet weak var groupName: UILabel! + + // MARK: - View Life Cycle + override func awakeFromNib() { + super.awakeFromNib() + setUI() + } + + static func nib() -> UINib { + return UINib(nibName: "GroupCollectionViewCell", bundle: nil) + } +} + +// MARK: - Extensions +extension GroupCollectionViewCell { + private func setUI() { + groupBackground.layer.cornerRadius = 15 + groupBackground.backgroundColor = .button + groupName.textColor = .mainColorButtonText + } + + override var isSelected: Bool { + didSet { + groupBackground.backgroundColor = isSelected ? .primary : .button + groupName.textColor = isSelected ? .background : .mainColorButtonText + } + } +} diff --git a/NADA-iOS-forRelease/Sources/Cells/GroupCell/GroupCollectionViewCell.xib b/NADA-iOS-forRelease/Sources/Cells/GroupCell/GroupCollectionViewCell.xib new file mode 100644 index 00000000..1986c186 --- /dev/null +++ b/NADA-iOS-forRelease/Sources/Cells/GroupCell/GroupCollectionViewCell.xib @@ -0,0 +1,64 @@ + + + + + + + + + + + + + SpoqaHanSansNeo-Bold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/AddWithIdBottomSheetViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/AddWithIdBottomSheetViewController.swift new file mode 100644 index 00000000..e97dddb9 --- /dev/null +++ b/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/AddWithIdBottomSheetViewController.swift @@ -0,0 +1,103 @@ +// +// AddWithIdBottomSheetViewController.swift +// NADA-iOS-forRelease +// +// Created by Yi Joon Choi on 2021/11/25. +// + +import UIKit +import IQKeyboardManagerSwift + +class AddWithIdBottomSheetViewController: CommonBottomSheetViewController, UITextFieldDelegate { + + // MARK: - Properties + // ID 추가 텍스트 필드 + private let addWithIdTextField: UITextField = { + let textField = UITextField() + textField.borderStyle = .none + textField.cornerRadius = 10 + textField.backgroundColor = .textBox + textField.attributedPlaceholder = NSAttributedString(string: "친구의 명함 ID를 입력해보세요.", attributes: [.foregroundColor: UIColor.quaternary, .font: UIFont.textRegular04]) + textField.returnKeyType = .done + textField.setLeftPaddingPoints(12) + textField.setRightPaddingPoints(12) + + return textField + }() + + private let errorImageView: UIImageView = { + let imageView = UIImageView() + imageView.image = UIImage(named: "iconError") + + return imageView + }() + + private let explainLabel: UILabel = { + let label = UILabel() + label.text = "검색한 ID가 존재하지 않습니다." + label.textColor = .stateColorError + label.font = .textRegular05 + + return label + }() + + override func viewDidLoad() { + super.viewDidLoad() + + setupUI() + addWithIdTextField.delegate = self + IQKeyboardManager.shared.shouldResignOnTouchOutside = false + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + self.addWithIdTextField.becomeFirstResponder() + } + + // MARK: - @Functions + // UI 세팅 작업 + private func setupUI() { + view.addSubview(addWithIdTextField) + view.addSubview(errorImageView) + view.addSubview(explainLabel) + + setupLayout() + errorImageView.isHidden = true + explainLabel.isHidden = true + } + + // 레이아웃 세팅 + private func setupLayout() { + addWithIdTextField.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + addWithIdTextField.topAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 20), + addWithIdTextField.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 24), + addWithIdTextField.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -24), + addWithIdTextField.heightAnchor.constraint(equalToConstant: 45) + ]) + + errorImageView.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + errorImageView.topAnchor.constraint(equalTo: addWithIdTextField.bottomAnchor, constant: 7), + errorImageView.leadingAnchor.constraint(equalTo: addWithIdTextField.leadingAnchor, constant: 4), + errorImageView.widthAnchor.constraint(equalToConstant: 16), + errorImageView.heightAnchor.constraint(equalToConstant: 16) + ]) + + explainLabel.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + explainLabel.topAnchor.constraint(equalTo: addWithIdTextField.bottomAnchor, constant: 8), + explainLabel.leadingAnchor.constraint(equalTo: errorImageView.trailingAnchor, constant: 5) + ]) + } +} + +extension AddWithIdBottomSheetViewController { + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + textField.resignFirstResponder() + // 서버 연결과 더불어... 검색 결과가 없으면 bottomsheet dismiss 하지 말고 hidden 풀어주기 + hideBottomSheetAndPresent(nextBottomSheet: CardResultBottomSheetViewController()) + return true + } +} diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/CardResultBottomSheetViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/CardResultBottomSheetViewController.swift new file mode 100644 index 00000000..9dcc06c1 --- /dev/null +++ b/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/CardResultBottomSheetViewController.swift @@ -0,0 +1,19 @@ +// +// CardResultBottomSheetViewController.swift +// NADA-iOS-forRelease +// +// Created by Yi Joon Choi on 2021/11/26. +// + +import UIKit +import IQKeyboardManagerSwift + +class CardResultBottomSheetViewController: CommonBottomSheetViewController, UITextFieldDelegate { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + +} diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/CommonBottomSheetViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/CommonBottomSheetViewController.swift index be17a3b3..a0f68554 100644 --- a/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/CommonBottomSheetViewController.swift +++ b/NADA-iOS-forRelease/Sources/ViewControllers/BottomSheet/CommonBottomSheetViewController.swift @@ -72,6 +72,7 @@ class CommonBottomSheetViewController: UIViewController { let label = UILabel() label.font = .systemFont(ofSize: 20, weight: .bold) label.textAlignment = .center + label.sizeToFit() return label }() @@ -155,7 +156,7 @@ class CommonBottomSheetViewController: UIViewController { titleLabel.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ titleLabel.topAnchor.constraint(equalTo: dismissIndicatorView.bottomAnchor, constant: 28), - titleLabel.widthAnchor.constraint(equalToConstant: 100), +// titleLabel.widthAnchor.constraint(equalToConstant: 100), titleLabel.centerXAnchor.constraint(equalTo: bottomSheetView.centerXAnchor) ]) } @@ -191,6 +192,27 @@ class CommonBottomSheetViewController: UIViewController { } } + // 바텀 시트 사라지고 바로 다시 다음 바텀 시트 올라오는 애니메이션 + func hideBottomSheetAndPresent(nextBottomSheet: CommonBottomSheetViewController) { + let safeAreaHeight = view.safeAreaLayoutGuide.layoutFrame.height + let bottomPadding = view.safeAreaInsets.bottom + bottomSheetViewTopConstraint.constant = safeAreaHeight + bottomPadding + UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseOut, animations: { + self.dimmedBackView.alpha = 0.0 + self.view.layoutIfNeeded() + self.bottomSheetCoverView.isHidden = false + }) { _ in + if self.presentingViewController != nil { + guard let presentingVC = self.presentingViewController else { return } + self.dismiss(animated: false) { + let nextVC = nextBottomSheet.setTitle("이채연").setHeight(574) + nextVC.modalPresentationStyle = .overFullScreen + presentingVC.present(nextVC, animated: true, completion: nil) + } + } + } + } + // UITapGestureRecognizer 연결 함수 부분 @objc private func dimmedViewTapped(_ tapRecognizer: UITapGestureRecognizer) { hideBottomSheetAndGoBack() diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/Group/GroupViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/Group/GroupViewController.swift index 420ab4fd..f06e63ac 100644 --- a/NADA-iOS-forRelease/Sources/ViewControllers/Group/GroupViewController.swift +++ b/NADA-iOS-forRelease/Sources/ViewControllers/Group/GroupViewController.swift @@ -9,9 +9,38 @@ import UIKit class GroupViewController: UIViewController { + // MARK: - Properties + // 네비게이션 바 + @IBAction func presentToAddWithIdView(_ sender: Any) { + let nextVC = AddWithIdBottomSheetViewController().setTitle("ID로 명함 추가").setHeight(184) + nextVC.modalPresentationStyle = .overFullScreen + self.present(nextVC, animated: true, completion: nil) + } + + @IBAction func presentToAddWithQrView(_ sender: Any) { + guard let nextVC = UIStoryboard.init(name: Const.Storyboard.Name.qrScan, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.qrScanViewController) as? QRScanViewController else { return } + nextVC.modalPresentationStyle = .overFullScreen + self.present(nextVC, animated: true, completion: nil) + } + + // 중간 그룹 이름들 나열된 뷰 + @IBAction func pushToGroupEdit(_ sender: Any) { + guard let nextVC = UIStoryboard.init(name: Const.Storyboard.Name.groupEdit, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.groupEditViewController) as? GroupEditViewController else { return } + + navigationController?.pushViewController(nextVC, animated: true) + } + + // collectionview + @IBOutlet weak var groupCollectionView: UICollectionView! + @IBOutlet weak var cardsCollectionView: UICollectionView! + + // 그룹 이름들을 담을 변수 생성 + var groups = ["미분류", "SOPT", "그룹명엄청길어요이거", "인하대학교"] + override func viewDidLoad() { super.viewDidLoad() - + registerCell() + setUI() // 그룹 리스트 조회 서버 테스트 // groupListFetchWithAPI(userID: "nada") // 그룹 삭제 서버 테스트 @@ -31,6 +60,22 @@ class GroupViewController: UIViewController { } +extension GroupViewController { + private func registerCell() { + groupCollectionView.delegate = self + groupCollectionView.dataSource = self + cardsCollectionView.delegate = self + cardsCollectionView.dataSource = self + + groupCollectionView.register(GroupCollectionViewCell.nib(), forCellWithReuseIdentifier: Const.Xib.groupCollectionViewCell) + cardsCollectionView.register(CardInGroupCollectionViewCell.nib(), forCellWithReuseIdentifier: Const.Xib.cardInGroupCollectionViewCell) + } + + private func setUI() { + navigationController?.navigationBar.isHidden = true + } +} + // MARK: - Network extension GroupViewController { @@ -161,7 +206,7 @@ extension GroupViewController { case .success(let data): if let card = data as? Card { // print(card) - //통신 성공 + // 통신 성공 } case .requestErr(let message): print("cardDetailFetchWithAPI - requestErr: \(message)") @@ -175,3 +220,105 @@ extension GroupViewController { } } } + +// MARK: - UICollectionViewDelegate +extension GroupViewController: UICollectionViewDelegate { + +} + +// MARK: - UICollectionViewDataSource +extension GroupViewController: UICollectionViewDataSource { + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + switch collectionView { + case groupCollectionView: + return groups.count + case cardsCollectionView: + return 5 + default: + return 0 + } + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + switch collectionView { + case groupCollectionView: + guard let groupCell = collectionView.dequeueReusableCell(withReuseIdentifier: Const.Xib.groupCollectionViewCell, for: indexPath) as? GroupCollectionViewCell else { + return UICollectionViewCell() + } + + groupCell.groupName.text = groups[indexPath.row] + if indexPath.row == 0 { +// groupCell.groupName.textColor = .background +// groupCell.groupBackground.backgroundColor = .primary + groupCell.isSelected = true + } else { + groupCell.isSelected = false + } + groupCollectionView.layoutIfNeeded() + return groupCell + case cardsCollectionView: + guard let cardCell = collectionView.dequeueReusableCell(withReuseIdentifier: Const.Xib.cardInGroupCollectionViewCell, for: indexPath) as? CardInGroupCollectionViewCell else { + return UICollectionViewCell() + } + + return cardCell + default: + return UICollectionViewCell() + } + } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + switch collectionView { + case groupCollectionView: + print(indexPath.row) + case cardsCollectionView: + print(indexPath.row) + default: + print(indexPath.row) + } + } +} + +// MARK: - UICollectionViewDelegateFlowLayout +extension GroupViewController: UICollectionViewDelegateFlowLayout { + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { + + var width: CGFloat + var height: CGFloat + + switch collectionView { + case groupCollectionView: + if groups[indexPath.row].count > 4 { + width = CGFloat(groups[indexPath.row].count) * 16 + } else { + width = 62 + } + height = collectionView.frame.size.height + case cardsCollectionView: +// width = collectionView.frame.size.width / 2 - 7.5 +// height = collectionView.frame.size.height / 2 + width = 156 + height = 258 + default: + width = 0 + height = 0 + } + return CGSize(width: width, height: height) + } + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { + return .zero + } + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { + return 0 + } + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { + switch collectionView { + case groupCollectionView: + return 5 + case cardsCollectionView: + return 14 + default: + return 0 + } + } +} diff --git a/NADA-iOS-forRelease/Sources/ViewControllers/Group/QRScanViewController.swift b/NADA-iOS-forRelease/Sources/ViewControllers/Group/QRScanViewController.swift new file mode 100644 index 00000000..567482d8 --- /dev/null +++ b/NADA-iOS-forRelease/Sources/ViewControllers/Group/QRScanViewController.swift @@ -0,0 +1,18 @@ +// +// QRScanViewController.swift +// NADA-iOS-forRelease +// +// Created by Yi Joon Choi on 2021/11/26. +// + +import UIKit + +class QRScanViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + +}