diff --git a/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj b/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj index ea1aebf1..8cd6813c 100644 --- a/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj +++ b/Spark-iOS/Spark-iOS.xcodeproj/project.pbxproj @@ -72,6 +72,11 @@ EBA93A82279082A5009AE771 /* CodeJoin.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EBA93A81279082A5009AE771 /* CodeJoin.storyboard */; }; EBA93A84279082B0009AE771 /* JoinCheck.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EBA93A83279082B0009AE771 /* JoinCheck.storyboard */; }; EBE90FCE2795C23A00157075 /* MyRoomCerti.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBE90FCD2795C23A00157075 /* MyRoomCerti.swift */; }; + EBE90FD42795D67500157075 /* AuthUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBE90FD32795D67500157075 /* AuthUpload.swift */; }; + EBE90FDA2796128800157075 /* SendSparkVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBE90FD92796128800157075 /* SendSparkVC.swift */; }; + EBE90FDC279612CA00157075 /* SendSpark.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EBE90FDB279612CA00157075 /* SendSpark.storyboard */; }; + EBE90FDE2796C45900157075 /* StatusButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBE90FDD2796C45900157075 /* StatusButton.swift */; }; + EBEA381D279441E000B5736A /* splash_iOS.json in Resources */ = {isa = PBXBuildFile; fileRef = EBEA381B279441DF00B5736A /* splash_iOS.json */; }; EBEA381F279450B900B5736A /* illust_confetti.json in Resources */ = {isa = PBXBuildFile; fileRef = EBEA381E279450B800B5736A /* illust_confetti.json */; }; EBEA382327945F5A00B5736A /* icHeartActive.json in Resources */ = {isa = PBXBuildFile; fileRef = EBEA382127945F5A00B5736A /* icHeartActive.json */; }; EBEA382D27947C9100B5736A /* MyRoomAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBEA382C27947C9100B5736A /* MyRoomAPI.swift */; }; @@ -195,6 +200,11 @@ EBA93A81279082A5009AE771 /* CodeJoin.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = CodeJoin.storyboard; sourceTree = ""; }; EBA93A83279082B0009AE771 /* JoinCheck.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = JoinCheck.storyboard; sourceTree = ""; }; EBE90FCD2795C23A00157075 /* MyRoomCerti.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRoomCerti.swift; sourceTree = ""; }; + EBE90FD32795D67500157075 /* AuthUpload.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthUpload.swift; sourceTree = ""; }; + EBE90FD92796128800157075 /* SendSparkVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendSparkVC.swift; sourceTree = ""; }; + EBE90FDB279612CA00157075 /* SendSpark.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = SendSpark.storyboard; sourceTree = ""; }; + EBE90FDD2796C45900157075 /* StatusButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusButton.swift; sourceTree = ""; }; + EBEA381B279441DF00B5736A /* splash_iOS.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = splash_iOS.json; sourceTree = ""; }; EBEA381E279450B800B5736A /* illust_confetti.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = illust_confetti.json; sourceTree = ""; }; EBEA382127945F5A00B5736A /* icHeartActive.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = icHeartActive.json; sourceTree = ""; }; EBEA382C27947C9100B5736A /* MyRoomAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRoomAPI.swift; sourceTree = ""; }; @@ -380,8 +390,8 @@ 2BE5D80927930A0F007A544D /* AuthTimer */ = { isa = PBXGroup; children = ( - 2BE5D80727930A06007A544D /* AuthTimerVC.swift */, 2BE5D81527932F31007A544D /* ResetPopupVC.swift */, + 2BE5D80727930A06007A544D /* AuthTimerVC.swift */, ); path = AuthTimer; sourceTree = ""; @@ -418,6 +428,7 @@ 2BF3AB4B27947C50001A9042 /* WaitingRoom.swift */, 2BBED12C279539B90052CA5C /* WaitingMember.swift */, EBEA38362794B34300B5736A /* CodeJoinCheck.swift */, + EBE90FD32795D67500157075 /* AuthUpload.swift */, 2B57F37B27968A28002A677D /* CreateRoom.swift */, 2B57F37D27969791002A677D /* RoomId.swift */, ); @@ -469,6 +480,7 @@ EB625E89278F29D300C43DE9 /* CarouselLayout.swift */, EB9C507C27922F2E00588155 /* LineAnimationView.swift */, 2BE5D80D2793203C007A544D /* Stopwatch.swift */, + EBE90FDD2796C45900157075 /* StatusButton.swift */, F86C68B627955ABA009A5296 /* SparkFlake.swift */, ); path = Classes; @@ -513,6 +525,7 @@ children = ( EB9C50832792A61D00588155 /* HabitAuthVC.swift */, EB9C50892792A86D00588155 /* CompleteAuthVC.swift */, + EBE90FD92796128800157075 /* SendSparkVC.swift */, ); path = HabitRoom; sourceTree = ""; @@ -522,6 +535,7 @@ children = ( EB9C50872792A67B00588155 /* HabitAuth.storyboard */, EB9C508B2792A90400588155 /* CompleteAuth.storyboard */, + EBE90FDB279612CA00157075 /* SendSpark.storyboard */, ); path = HabitRoom; sourceTree = ""; @@ -952,6 +966,7 @@ 2B947204278CB00E005484C5 /* Futura Medium Italic.otf in Resources */, 2B9C6BCB279277D600CD914F /* GoalWriting.storyboard in Resources */, F82B2E0E278ED01F00219628 /* Splash.storyboard in Resources */, + EBE90FDC279612CA00157075 /* SendSpark.storyboard in Resources */, F80A3E51278C1BCE00728E07 /* Feed.storyboard in Resources */, EBEA383527948C2D00B5736A /* ticket_welcome.json in Resources */, F8FAA9772790346000C4190F /* HomeWaitingCVC.xib in Resources */, @@ -1078,6 +1093,7 @@ 2B57F37C27968A28002A677D /* CreateRoom.swift in Sources */, 2B9C6BCE2792781F00CD914F /* GoalWritingVC.swift in Sources */, F80A3E4F278C18BA00728E07 /* MainTBC.swift in Sources */, + EBE90FDA2796128800157075 /* SendSparkVC.swift in Sources */, EBEA383927953BC700B5736A /* Lottie.swift in Sources */, F82F57FD2792847D003E4174 /* GenericResponse.swift in Sources */, 2BBED1392795F4500052CA5C /* FeedCellDelegate.swift in Sources */, @@ -1091,6 +1107,8 @@ EB9C507D27922F2E00588155 /* LineAnimationView.swift in Sources */, EB625E7B278F271400C43DE9 /* DoingStorageCVC.swift in Sources */, F816F125278E1C920008ED00 /* LoginVC.swift in Sources */, + EBE90FDE2796C45900157075 /* StatusButton.swift in Sources */, + EBE90FD42795D67500157075 /* AuthUpload.swift in Sources */, F8096F3E2784213700B71D38 /* UIFont+.swift in Sources */, F82F580A279289C4003E4174 /* HomeService.swift in Sources */, EB625E95278F8E7200C43DE9 /* MoreStorageCVC.swift in Sources */, diff --git a/Spark-iOS/Spark-iOS/Resource/Constants/Storyboard.swift b/Spark-iOS/Spark-iOS/Resource/Constants/Storyboard.swift index f8ab4eb1..bb5b3b36 100644 --- a/Spark-iOS/Spark-iOS/Resource/Constants/Storyboard.swift +++ b/Spark-iOS/Spark-iOS/Resource/Constants/Storyboard.swift @@ -29,6 +29,7 @@ extension Const { static let authUpload = "AuthUpload" static let authTimer = "AuthTimer" static let resetPopup = "ResetPopup" + static let sendSpark = "SendSpark" } } } diff --git a/Spark-iOS/Spark-iOS/Resource/Constants/ViewController.swift b/Spark-iOS/Spark-iOS/Resource/Constants/ViewController.swift index 5b4f322a..915300dc 100644 --- a/Spark-iOS/Spark-iOS/Resource/Constants/ViewController.swift +++ b/Spark-iOS/Spark-iOS/Resource/Constants/ViewController.swift @@ -29,6 +29,7 @@ extension Const { static let authUpload = "AuthUploadVC" static let authTimer = "AuthTimerVC" static let resetPopup = "ResetPopupVC" + static let sendSpark = "SendSparkVC" } } } diff --git a/Spark-iOS/Spark-iOS/Resource/Storyboards/HabitRoom/SendSpark.storyboard b/Spark-iOS/Spark-iOS/Resource/Storyboards/HabitRoom/SendSpark.storyboard new file mode 100644 index 00000000..3d20a04a --- /dev/null +++ b/Spark-iOS/Spark-iOS/Resource/Storyboards/HabitRoom/SendSpark.storyboard @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + NotoSansKR-Medium + + + NotoSansKR-Regular + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Spark-iOS/Spark-iOS/Source/Classes/CarouselLayout.swift b/Spark-iOS/Spark-iOS/Source/Classes/CarouselLayout.swift index 31f9c253..5be41794 100644 --- a/Spark-iOS/Spark-iOS/Source/Classes/CarouselLayout.swift +++ b/Spark-iOS/Spark-iOS/Source/Classes/CarouselLayout.swift @@ -115,7 +115,3 @@ class CarouselLayout: UICollectionViewFlowLayout { return CGPoint(x: proposedContentOffset.x + offsetAdjustment, y: proposedContentOffset.y) } } - -class MyButton: UIButton { - public var statusCV: Int? -} diff --git a/Spark-iOS/Spark-iOS/Source/Classes/StatusButton.swift b/Spark-iOS/Spark-iOS/Source/Classes/StatusButton.swift new file mode 100644 index 00000000..833c83fa --- /dev/null +++ b/Spark-iOS/Spark-iOS/Source/Classes/StatusButton.swift @@ -0,0 +1,12 @@ +// +// StatusButton.swift +// Spark-iOS +// +// Created by Junho Lee on 2022/01/18. +// + +import UIKit + +class StatusButton: UIButton { + public var status: Int = -1 +} diff --git a/Spark-iOS/Spark-iOS/Source/NetworkModels/Room/AuthUpload.swift b/Spark-iOS/Spark-iOS/Source/NetworkModels/Room/AuthUpload.swift new file mode 100644 index 00000000..eecb6771 --- /dev/null +++ b/Spark-iOS/Spark-iOS/Source/NetworkModels/Room/AuthUpload.swift @@ -0,0 +1,29 @@ +// +// AuthUpload.swift +// Spark-iOS +// +// Created by Junho Lee on 2022/01/18. +// + +import Foundation + +// MARK: - AuthUpload +struct AuthUpload: Codable { + let userID: Int + let nickname: String + let profileImg: String? + let roomID: Int + let roomName: String + let recordID, day: Int + let certifyingImg: String? + let timerRecord: String? + + enum CodingKeys: String, CodingKey { + case userID = "userId" + case nickname, profileImg + case roomID = "roomId" + case roomName + case recordID = "recordId" + case day, certifyingImg, timerRecord + } +} diff --git a/Spark-iOS/Spark-iOS/Source/NetworkServices/Room/RoomAPI.swift b/Spark-iOS/Spark-iOS/Source/NetworkServices/Room/RoomAPI.swift index cead815d..7bd13770 100644 --- a/Spark-iOS/Spark-iOS/Source/NetworkServices/Room/RoomAPI.swift +++ b/Spark-iOS/Spark-iOS/Source/NetworkServices/Room/RoomAPI.swift @@ -8,6 +8,7 @@ import Foundation import Moya +import UIKit public class RoomAPI { @@ -179,4 +180,37 @@ public class RoomAPI { return .networkFail } } + + func authUpload(roomID: Int, timer: String, image: UIImage, completion: @escaping(NetworkResult) -> Void) { + roomProvider.request(.authUpload(roomID: roomID, timer: timer, image: image)) { result in + switch result { + case .success(let response): + let statusCode = response.statusCode + let data = response.data + let networkResult = self.judgeAuthUploadStatus(by: statusCode, data) + completion(networkResult) + + case .failure(let err): + print(err) + } + } + } + + private func judgeAuthUploadStatus(by statusCode: Int, _ data: Data) -> NetworkResult { + let decoder = JSONDecoder() + guard let decodedData = try? + decoder.decode(GenericResponse.self, from: data) + else { return .pathErr } + + switch statusCode { + case 200: + return .success(decodedData.data ?? "None-Data") + case 400..<500: + return .requestErr(decodedData.message) + case 500: + return .serverErr + default: + return .networkFail + } + } } diff --git a/Spark-iOS/Spark-iOS/Source/NetworkServices/Room/RoomService.swift b/Spark-iOS/Spark-iOS/Source/NetworkServices/Room/RoomService.swift index 632e7eec..06cb936c 100644 --- a/Spark-iOS/Spark-iOS/Source/NetworkServices/Room/RoomService.swift +++ b/Spark-iOS/Spark-iOS/Source/NetworkServices/Room/RoomService.swift @@ -14,6 +14,7 @@ enum RoomService { case waitingMemberFetch(roomID: Int) case codeJoinCheckFetch(code: String) case enterRoom(roomID: Int) + case authUpload(roomID: Int, timer: String, image: UIImage) case createRoom(createRoom: CreateRoom) } @@ -32,6 +33,8 @@ extension RoomService: TargetType { return "/room/code/\(code)" case .enterRoom(let roomID): return "/room/\(roomID)/enter" + case .authUpload(let roomID, _, _): + return "/room/\(roomID)/record" case .createRoom: return "/room" } @@ -47,6 +50,8 @@ extension RoomService: TargetType { return .get case .enterRoom: return .post + case .authUpload: + return .post case .createRoom: return .post } @@ -61,13 +66,23 @@ extension RoomService: TargetType { case .waitingMemberFetch: return .requestPlain case .enterRoom(let roomID): - return .requestParameters(parameters:["roomId": roomID], encoding: JSONEncoding.default) + return .requestParameters(parameters: ["roomId": roomID], encoding: JSONEncoding.default) + case .authUpload(_, let timer, let image): + var multiPartData: [Moya.MultipartFormData] = [] + + let timerData = timer.data(using: .utf8) ?? Data() + multiPartData.append(MultipartFormData(provider: .data(timerData), name: "timerRecord")) + + let imageData = MultipartFormData(provider: .data(image.pngData() ?? Data()), name: "image", fileName: "image", mimeType: "image/png") + multiPartData.append(imageData) + + return .uploadMultipart(multiPartData) case .createRoom(let createRoom): return .requestJSONEncodable(createRoom) } } - var headers: [String : String]? { + var headers: [String: String]? { switch self { case .waitingFetch: return Const.Header.authrizationHeader @@ -77,6 +92,8 @@ extension RoomService: TargetType { return Const.Header.authrizationHeader case .waitingMemberFetch: return Const.Header.authrizationHeader + case .authUpload: + return Const.Header.authrizationHeader case .createRoom: return Const.Header.authrizationHeader } diff --git a/Spark-iOS/Spark-iOS/Source/SceneDelegate.swift b/Spark-iOS/Spark-iOS/Source/SceneDelegate.swift index 555c5abf..d80a08d8 100644 --- a/Spark-iOS/Spark-iOS/Source/SceneDelegate.swift +++ b/Spark-iOS/Spark-iOS/Source/SceneDelegate.swift @@ -18,7 +18,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window = UIWindow(frame: windowScene.coordinateSpace.bounds) window?.windowScene = windowScene - let rootViewController = UIStoryboard(name: Const.Storyboard.Name.splash, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.splash) + let rootViewController = UIStoryboard(name: Const.Storyboard.Name.mainTabBar, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.mainTabBar) window?.rootViewController = rootViewController window?.makeKeyAndVisible() } diff --git a/Spark-iOS/Spark-iOS/Source/ViewControllers/Auth/AuthUpload/AuthUploadVC.swift b/Spark-iOS/Spark-iOS/Source/ViewControllers/Auth/AuthUpload/AuthUploadVC.swift index 7abdd344..8f3c5950 100644 --- a/Spark-iOS/Spark-iOS/Source/ViewControllers/Auth/AuthUpload/AuthUploadVC.swift +++ b/Spark-iOS/Spark-iOS/Source/ViewControllers/Auth/AuthUpload/AuthUploadVC.swift @@ -21,6 +21,7 @@ class AuthUploadVC: UIViewController { // MARK: - Properties var vcType: VCCase = .albumTimer + var roomID: Int? var uploadImageView = UIImageView() let fadeImageView = UIImageView() var uploadImage = UIImage() @@ -214,15 +215,11 @@ extension AuthUploadVC { } } + // TODO: 업로드 시간이 길다. 로딩 넣기. // 업로드 @objc func touchUploadButton() { - guard let popupVC = UIStoryboard(name: Const.Storyboard.Name.completeAuth, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.completeAuth) as? CompleteAuthVC else {return} - - popupVC.modalTransitionStyle = .crossDissolve - popupVC.modalPresentationStyle = .overFullScreen - - present(popupVC, animated: true, completion: nil) + authUploadWithAPI() } } @@ -318,3 +315,33 @@ extension AuthUploadVC { } } } + +// MARK: Network + +extension AuthUploadVC { + func authUploadWithAPI() { + RoomAPI.shared.authUpload(roomID: roomID ?? 0, timer: timerLabel.text ?? "", image: uploadImageView.image ?? UIImage()) { response in + switch response { + case .success(let data): + if let authUpload = data as? AuthUpload { + print(authUpload) + + guard let popupVC = UIStoryboard(name: Const.Storyboard.Name.completeAuth, bundle: nil).instantiateViewController(withIdentifier: Const.ViewController.Identifier.completeAuth) as? CompleteAuthVC else {return} + + popupVC.modalTransitionStyle = .crossDissolve + popupVC.modalPresentationStyle = .overFullScreen + + self.present(popupVC, animated: true, completion: nil) + } + case .requestErr(let message): + print("authUploadWithAPI - requestErr \(message)") + case .pathErr: + print("authUploadWithAPI - pathErr") + case .serverErr: + print("authUploadWithAPI - serverErr") + case .networkFail: + print("authUploadWithAPI - networkFail") + } + } + } +} diff --git a/Spark-iOS/Spark-iOS/Source/ViewControllers/CodeJoin/CodeJoinVC.swift b/Spark-iOS/Spark-iOS/Source/ViewControllers/CodeJoin/CodeJoinVC.swift index c62526b1..5efe96fe 100644 --- a/Spark-iOS/Spark-iOS/Source/ViewControllers/CodeJoin/CodeJoinVC.swift +++ b/Spark-iOS/Spark-iOS/Source/ViewControllers/CodeJoin/CodeJoinVC.swift @@ -185,11 +185,12 @@ extension CodeJoinVC { let nextSB = UIStoryboard.init(name: Const.Storyboard.Name.joinCheck, bundle: nil) guard let nextVC = nextSB.instantiateViewController(identifier: Const.ViewController.Identifier.joinCheck) as? JoinCheckVC else {return} - nextVC.creatorName = codeWaiting.creatorName - nextVC.roomName = "\(codeWaiting.roomName)님이 초대한 방" + nextVC.creatorName = "\(codeWaiting.creatorName)님이 초대한 방" + nextVC.roomName = codeWaiting.roomName nextVC.roomID = codeWaiting.roomID nextVC.modalPresentationStyle = .fullScreen + nextVC.modalTransitionStyle = .crossDissolve self.present(nextVC, animated: false, completion: nil) } case .requestErr(let message): diff --git a/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/SendSparkVC.swift b/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/SendSparkVC.swift new file mode 100644 index 00000000..b1945019 --- /dev/null +++ b/Spark-iOS/Spark-iOS/Source/ViewControllers/HabitRoom/SendSparkVC.swift @@ -0,0 +1,159 @@ +// +// SendSparkVC.swift +// Spark-iOS +// +// Created by Junho Lee on 2022/01/18. +// + +import UIKit + +class SendSparkVC: UIViewController { + + // MARK: Properties + var selectedMessage: String = "" + var firstButton = StatusButton() + var secondButton = StatusButton() + var thirdButton = StatusButton() + var fourthButton = StatusButton() + + // MARK: IBoutlet properties + + @IBOutlet weak var popUpView: UIView! + @IBOutlet weak var guideLabel: UILabel! + + // MARK: Life Cycle + + override func viewDidLoad() { + super.viewDidLoad() + + setUI() + setLayout() + setAddTargets(firstButton, secondButton, thirdButton, fourthButton) + } +} + +// MARK: Methods + +extension SendSparkVC { + private func setUI() { + view.backgroundColor = .sparkBlack.withAlphaComponent(0.8) + tabBarController?.tabBar.isHidden = true + + [firstButton, secondButton, thirdButton, fourthButton].forEach { + $0.tintColor = .sparkLightPinkred + $0.layer.borderColor = UIColor.sparkLightPinkred.cgColor + $0.layer.cornerRadius = 2 + $0.layer.borderWidth = 1 + $0.setTitleColor(.sparkLightPinkred, for: .normal) + } + + firstButton.setTitle("👊 아자아자 파이팅!", for: .normal) + secondButton.setTitle("🔥오늘 안 해? 같이 해!", for: .normal) + thirdButton.setTitle("👉 너만 하면 돼!", for: .normal) + fourthButton.setTitle("👍 얼마 안 남았어, 어서 하자!", for: .normal) + + firstButton.status = 1 + secondButton.status = 2 + thirdButton.status = 3 + fourthButton.status = 4 + } + + private func setLayout() { + view.addSubviews([firstButton, secondButton, thirdButton, fourthButton]) + + firstButton.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalTo(guideLabel.snp.bottom).offset(20) + make.height.equalTo(36) + make.width.equalTo(170) + } + + secondButton.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalTo(firstButton.snp.bottom).offset(20) + make.height.equalTo(36) + make.width.equalTo(186) + } + + thirdButton.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalTo(secondButton.snp.bottom).offset(20) + make.height.equalTo(36) + make.width.equalTo(147) + } + + fourthButton.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalTo(thirdButton.snp.bottom).offset(20) + make.height.equalTo(36) + make.width.equalTo(230) + } + } + + // 버튼 타겟 설정 + private func setAddTargets(_ buttons: UIButton...) { + for button in buttons { + button.addTarget(self, action: #selector(setSelectedButton), for: .touchUpInside) + } + } + + // MARK: - @objc Function + + @objc func setSelectedButton(sender: StatusButton) { + + let status = sender.status + + sender.setTitleColor(.sparkDarkPinkred, for: .normal) + sender.backgroundColor = .sparkMostLightPinkred + sender.titleLabel?.backgroundColor = .sparkMostLightPinkred + sender.layer.borderColor = UIColor.sparkDarkPinkred.cgColor + + selectedMessage = sender.titleLabel?.text ?? "" + + switch status { + case 1: + [firstButton, secondButton, thirdButton, fourthButton].forEach { + if $0.status != 1 { + $0.tintColor = .sparkLightPinkred + $0.layer.borderColor = UIColor.sparkLightPinkred.cgColor + $0.setTitleColor(.sparkLightPinkred, for: .normal) + $0.backgroundColor = .sparkWhite + $0.titleLabel?.backgroundColor = .sparkWhite + } + } + + case 2: + [firstButton, secondButton, thirdButton, fourthButton].forEach { + if $0.status != 2 { + $0.tintColor = .sparkLightPinkred + $0.layer.borderColor = UIColor.sparkLightPinkred.cgColor + $0.setTitleColor(.sparkLightPinkred, for: .normal) + $0.backgroundColor = .sparkWhite + $0.titleLabel?.backgroundColor = .sparkWhite + } + } + + case 3: + [firstButton, secondButton, thirdButton, fourthButton].forEach { + if $0.status != 3 { + $0.tintColor = .sparkLightPinkred + $0.layer.borderColor = UIColor.sparkLightPinkred.cgColor + $0.setTitleColor(.sparkLightPinkred, for: .normal) + $0.backgroundColor = .sparkWhite + $0.titleLabel?.backgroundColor = .sparkWhite + } + } + + default: + [firstButton, secondButton, thirdButton, fourthButton].forEach { + if $0.status != 4 { + $0.tintColor = .sparkLightPinkred + $0.layer.borderColor = UIColor.sparkLightPinkred.cgColor + $0.setTitleColor(.sparkLightPinkred, for: .normal) + $0.backgroundColor = .sparkWhite + $0.titleLabel?.backgroundColor = .sparkWhite + } + } + } + } +} diff --git a/Spark-iOS/Spark-iOS/Source/ViewControllers/TabBar/StorageVC.swift b/Spark-iOS/Spark-iOS/Source/ViewControllers/TabBar/StorageVC.swift index b0940859..ca1ee817 100644 --- a/Spark-iOS/Spark-iOS/Source/ViewControllers/TabBar/StorageVC.swift +++ b/Spark-iOS/Spark-iOS/Source/ViewControllers/TabBar/StorageVC.swift @@ -11,9 +11,9 @@ import SnapKit class StorageVC: UIViewController { // MARK: - Properties - let doingButton = MyButton() - let doneButton = MyButton() - let failButton = MyButton() + let doingButton = StatusButton() + let doneButton = StatusButton() + let failButton = StatusButton() let doingLabel = UILabel() let doneLabel = UILabel() @@ -127,7 +127,7 @@ extension StorageVC { doneBlockingView.backgroundColor = .sparkWhite failBlockingView.backgroundColor = .sparkWhite - doingButton.statusCV = 0 + doingButton.status = 0 doingButton.backgroundColor = .clear doingButton.setTitle("진행중", for: .normal) doingButton.titleLabel?.font = .h3Subtitle @@ -142,7 +142,7 @@ extension StorageVC { doingLabel.textColor = .sparkDarkPinkred doingLabel.font = .enMediumFont(ofSize: 14) - doneButton.statusCV = 1 + doneButton.status = 1 doneButton.backgroundColor = .clear doneButton.setTitle("완료", for: .normal) doneButton.titleLabel?.font = .h3Subtitle @@ -155,7 +155,7 @@ extension StorageVC { doneLabel.textColor = .sparkDarkGray doneLabel.font = .enMediumFont(ofSize: 14) - failButton.statusCV = 2 + failButton.status = 2 failButton.backgroundColor = .clear failButton.setTitle("미완료", for: .normal) failButton.titleLabel?.font = .h3Subtitle @@ -271,7 +271,7 @@ extension StorageVC { } // 버튼 타겟 설정 - private func setAddTargets(_ buttons: MyButton...) { + private func setAddTargets(_ buttons: StatusButton...) { for button in buttons { button.addTarget(self, action: #selector(changeCollectionView), for: .touchUpInside) } @@ -279,8 +279,8 @@ extension StorageVC { // MARK: - @objc Function - @objc func changeCollectionView(sender: MyButton) { - let status: Int = (sender.statusCV)! + @objc func changeCollectionView(sender: StatusButton) { + let status: Int = (sender.status) switch status { case 1: DoingCV.isHidden = true