From a7bc4af137bc61b9ff62a036c75d198a279f1d73 Mon Sep 17 00:00:00 2001 From: HISEHOONAN Date: Fri, 21 Mar 2025 23:17:08 +0900 Subject: [PATCH 1/5] [FEAT] #33 Fix CameraButton and Cell --- .../Pinit/Views/Home/HomeViewController.swift | 4 +++- .../Views/Home/PinCollectionViewAdapter.swift | 1 + Pinit/Pinit/Views/Home/PinRecordCell.swift | 4 ++-- .../Views/PinEdit/PinEditViewController.swift | 24 +++++++++++++++---- 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/Pinit/Pinit/Views/Home/HomeViewController.swift b/Pinit/Pinit/Views/Home/HomeViewController.swift index 806629e..1bb9d1b 100644 --- a/Pinit/Pinit/Views/Home/HomeViewController.swift +++ b/Pinit/Pinit/Views/Home/HomeViewController.swift @@ -177,7 +177,9 @@ extension HomeViewController: MKMapViewDelegate { let visibleMarkers = visibleAnnotations.compactMap { $0 as? CustomAnnotation } // let visibleClusters = visibleAnnotations.compactMap{ $0 as? MKClusterAnnotation } // 할필요없음 // BottomSheet의 CollectionView 업데이트 - adapter?.data = visibleMarkers.map{ $0.pinData } + adapter?.data = visibleMarkers.map{ $0.pinData }.sorted(by: { + $0.date > $1.date + }) bottomSheet.collectionView.reloadData() } } diff --git a/Pinit/Pinit/Views/Home/PinCollectionViewAdapter.swift b/Pinit/Pinit/Views/Home/PinCollectionViewAdapter.swift index 15b848d..40ad348 100644 --- a/Pinit/Pinit/Views/Home/PinCollectionViewAdapter.swift +++ b/Pinit/Pinit/Views/Home/PinCollectionViewAdapter.swift @@ -49,6 +49,7 @@ extension PinCollectionViewAdapter: UICollectionViewDataSource { guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as? PinRecordCell else { return UICollectionViewCell() } + cell.thumbnailImageView.image = nil cell.configure(model: data[indexPath.row]) cell.layoutIfNeeded() diff --git a/Pinit/Pinit/Views/Home/PinRecordCell.swift b/Pinit/Pinit/Views/Home/PinRecordCell.swift index 698c05a..35b911b 100644 --- a/Pinit/Pinit/Views/Home/PinRecordCell.swift +++ b/Pinit/Pinit/Views/Home/PinRecordCell.swift @@ -19,9 +19,9 @@ final class PinRecordCell: UICollectionViewCell { view.layer.shadowOffset = CGSize(width: 0, height: 4) return view }() - private lazy var thumbnailImageView: UIImageView = { + public lazy var thumbnailImageView: UIImageView = { let imageView = UIImageView() - imageView.contentMode = .scaleAspectFit + imageView.contentMode = .scaleToFill imageView.backgroundColor = .lightGray return imageView }() diff --git a/Pinit/Pinit/Views/PinEdit/PinEditViewController.swift b/Pinit/Pinit/Views/PinEdit/PinEditViewController.swift index 2abb433..e274be2 100644 --- a/Pinit/Pinit/Views/PinEdit/PinEditViewController.swift +++ b/Pinit/Pinit/Views/PinEdit/PinEditViewController.swift @@ -20,6 +20,7 @@ final class PinEditViewController: UIViewController, UITextViewDelegate { var pinEntity: PinEntity? var pinmode: PinMode? var isAdded: ((PinEntity) -> Void)? // 핀추가가 됐을때 호출되는 클로저 (홈에서만 사용) + private var pickedImage: UIImage? public lazy var mapView: MKMapView = { var map = MKMapView() @@ -249,7 +250,9 @@ final class PinEditViewController: UIViewController, UITextViewDelegate { @objc private func saveButtonTapped() { pinEntity?.title = titleTextField.text ?? "" pinEntity?.description = contentTextView.text ?? "" -// pinEntity?.mediaPath = image ???? + + pinEntity?.mediaPath = pickedImage + isAdded?(pinEntity!) dismiss(animated: true) } @@ -269,6 +272,7 @@ final class PinEditViewController: UIViewController, UITextViewDelegate { self.presentImagePicker(sourceType: .photoLibrary) } let cancelAction = UIAlertAction(title: "취소", style: .cancel, handler: nil) + actionSheet.addAction(cameraAction) actionSheet.addAction(galleryAction) actionSheet.addAction(cancelAction) @@ -332,10 +336,22 @@ final class PinEditViewController: UIViewController, UITextViewDelegate { //MARK: - PinEditViewController 내에서 사진 선택 기능을 쉽게 사용 extension PinEditViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { + func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { if let selectedImage = info[.editedImage] as? UIImage ?? info[.originalImage] as? UIImage { - // Handle the selected image (save, display, etc.) - print("Selected Image: \(selectedImage)") + self.pickedImage = selectedImage + cameraButton.backgroundColor = .clear + cameraButton.setImage(nil, for: .normal) +// +// // 이미지를 버튼 크기에 맞게 조정하여 설정 +// let resizedImage = resizeImage(image: pickedImage, targetSize: CGSize(width: 150, height: 150)) + + cameraButton.clipsToBounds = true + cameraButton.layer.cornerRadius = 75 + cameraButton.setBackgroundImage(pickedImage, for: .normal) + + // 선택한 이미지를 pinEntity에 저장 (나중에 경로로 변환하는 로직 추가 필요) + // pinEntity?.mediaPath = ... } picker.dismiss(animated: true, completion: nil) } @@ -348,5 +364,5 @@ extension PinEditViewController: UIImagePickerControllerDelegate, UINavigationCo #Preview{ PinEditViewController() - + } From eb868fbdbc8f44b000c26416af60ba5b78cee75f Mon Sep 17 00:00:00 2001 From: JungHm Date: Fri, 21 Mar 2025 23:25:26 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[FIX]=20#33=20HomeVC=20ReloadData=20?= =?UTF-8?q?=EC=A3=BC=EA=B8=B0=20=EA=B0=90=EC=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Pinit/Pinit/Views/Home/HomeViewController.swift | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Pinit/Pinit/Views/Home/HomeViewController.swift b/Pinit/Pinit/Views/Home/HomeViewController.swift index 1bb9d1b..f4e424e 100644 --- a/Pinit/Pinit/Views/Home/HomeViewController.swift +++ b/Pinit/Pinit/Views/Home/HomeViewController.swift @@ -174,12 +174,14 @@ extension HomeViewController: MKMapViewDelegate { } func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) { let visibleAnnotations = mapView.annotations(in: mapView.visibleMapRect) - let visibleMarkers = visibleAnnotations.compactMap { $0 as? CustomAnnotation } -// let visibleClusters = visibleAnnotations.compactMap{ $0 as? MKClusterAnnotation } // 할필요없음 - // BottomSheet의 CollectionView 업데이트 - adapter?.data = visibleMarkers.map{ $0.pinData }.sorted(by: { - $0.date > $1.date - }) + let visibleMarkers = visibleAnnotations.compactMap { ($0 as? CustomAnnotation)?.pinData } + + guard let adapterData = adapter?.data else { return } + let adapterSet = Set(adapterData.map(\.pin_id)) + let temp = Set(visibleMarkers.map{$0.pin_id}).symmetricDifference(adapterSet).count + guard temp != 0 else { return } + + adapter?.data = visibleMarkers.sorted(by: { $0.date > $1.date }) bottomSheet.collectionView.reloadData() } } From dde5f9831db1d7a6b4d0a437f16d6c5faf98041d Mon Sep 17 00:00:00 2001 From: HISEHOONAN Date: Sat, 22 Mar 2025 00:21:32 +0900 Subject: [PATCH 3/5] [FEAT] #33 Adapter Edit --- Pinit/Pinit/Views/Home/CustomBottomSheet.swift | 7 ++++--- Pinit/Pinit/Views/Home/HomeViewController.swift | 2 ++ Pinit/Pinit/Views/MainTabBarController.swift | 4 ++-- Pinit/Pinit/Views/PastPin/PastPinViewController.swift | 8 ++++++-- Pinit/Pinit/Views/PinDetail/PinDetailHeader.swift | 5 +++++ Pinit/Pinit/Views/PinDetail/PinDetailViewController.swift | 2 +- Pinit/Pinit/Views/PinEdit/PinEditViewController.swift | 2 +- 7 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Pinit/Pinit/Views/Home/CustomBottomSheet.swift b/Pinit/Pinit/Views/Home/CustomBottomSheet.swift index fabefd4..1e297b3 100644 --- a/Pinit/Pinit/Views/Home/CustomBottomSheet.swift +++ b/Pinit/Pinit/Views/Home/CustomBottomSheet.swift @@ -9,10 +9,11 @@ import UIKit final class CustomBottomSheet: UIView { var collectionView = UICollectionView(frame: .zero, collectionViewLayout: .init()) + let grabber: UIView = { let grabber = UIView() grabber.layer.cornerRadius = 4 - grabber.backgroundColor = .black + grabber.backgroundColor = DesignSystemColor.Purple.value grabber.layer.borderColor = UIColor.white.cgColor grabber.layer.borderWidth = 1 grabber.clipsToBounds = true @@ -36,7 +37,7 @@ final class CustomBottomSheet: UIView { self.layer.maskedCorners = .init(arrayLiteral: [.layerMaxXMinYCorner, .layerMinXMinYCorner]) addSubviews(collectionView, grabber) - + grabber.snp.makeConstraints { $0.centerX.equalToSuperview() $0.top.equalToSuperview().offset(8) @@ -45,7 +46,7 @@ final class CustomBottomSheet: UIView { } collectionView.snp.makeConstraints { - $0.top.equalToSuperview().offset(cornerRadius*1.5) + $0.top.equalToSuperview().offset(cornerRadius*1.8) $0.leading.trailing.bottom.equalToSuperview() } } diff --git a/Pinit/Pinit/Views/Home/HomeViewController.swift b/Pinit/Pinit/Views/Home/HomeViewController.swift index f4e424e..3287c30 100644 --- a/Pinit/Pinit/Views/Home/HomeViewController.swift +++ b/Pinit/Pinit/Views/Home/HomeViewController.swift @@ -26,6 +26,7 @@ class HomeViewController: UIViewController { let image = UIImage(systemName: "pencil.line") button.setImage(UIImage(systemName: "pencil.line"), for: .normal) button.backgroundColor = .secondarySystemBackground + button.tintColor = DesignSystemColor.Purple.value button.layer.cornerRadius = circleButtonSize / 2 button.clipsToBounds = true return button @@ -34,6 +35,7 @@ class HomeViewController: UIViewController { let button = UIButton() button.setImage(UIImage(systemName: "dot.scope"), for: .normal) button.backgroundColor = .secondarySystemBackground + button.tintColor = DesignSystemColor.Purple.value button.layer.cornerRadius = circleButtonSize / 2 button.clipsToBounds = true return button diff --git a/Pinit/Pinit/Views/MainTabBarController.swift b/Pinit/Pinit/Views/MainTabBarController.swift index 0ac2ff8..bb421ad 100644 --- a/Pinit/Pinit/Views/MainTabBarController.swift +++ b/Pinit/Pinit/Views/MainTabBarController.swift @@ -24,7 +24,7 @@ final class MainTabBarController: UITabBarController { appearance.shadowColor = UIColor.clear // set tabbar background color - appearance.backgroundColor = .white + appearance.backgroundColor = .secondarySystemBackground tabBar.standardAppearance = appearance @@ -34,7 +34,7 @@ final class MainTabBarController: UITabBarController { } // set tabbar tintColor - tabBar.tintColor = .black + tabBar.tintColor = DesignSystemColor.Purple.value // set tabbar shadow tabBar.layer.masksToBounds = false diff --git a/Pinit/Pinit/Views/PastPin/PastPinViewController.swift b/Pinit/Pinit/Views/PastPin/PastPinViewController.swift index 0c94362..e1869d6 100644 --- a/Pinit/Pinit/Views/PastPin/PastPinViewController.swift +++ b/Pinit/Pinit/Views/PastPin/PastPinViewController.swift @@ -152,10 +152,14 @@ extension PastPinViewController : PinCollectionViewAdapterDelegate { func selectedItem(selected: PinEntity) { //화면 이동 let vc = PinDetailViewController(selected, isPin: true) vc.deletePinNoti = { pin in - // 여기서 삭제된 핀이 무엇인지 알려주니까 여기서 삭제된 핀 데이터 소스에서 제거하기 + guard let data = self.adapter?.data else { return } + self.adapter?.data = data.filter { $0.pin_id != pin.pin_id } + self.PinCollectionView.reloadData() } vc.updatePinNoti = { before, after in - // 여기서 수정된 핀 비포, 애프터로 나오니까 데이터 소스에서 업데이트 하기 + guard let data = self.adapter?.data else { return } + data.first{ $0.pin_id == before.pin_id } + } present(vc, animated: true) } diff --git a/Pinit/Pinit/Views/PinDetail/PinDetailHeader.swift b/Pinit/Pinit/Views/PinDetail/PinDetailHeader.swift index fcd4910..affab84 100644 --- a/Pinit/Pinit/Views/PinDetail/PinDetailHeader.swift +++ b/Pinit/Pinit/Views/PinDetail/PinDetailHeader.swift @@ -69,7 +69,12 @@ class PinDetailHeader: UIView { private lazy var pinImageView: UIImageView = { let imageView = UIImageView() imageView.image = entity.mediaPath + imageView.backgroundColor = DesignSystemColor.Lavender.value +// imageView.layer.borderWidth = 4 +// imageView.layer.borderColor = DesignSystemColor.Purple.value.cgColor + imageView.layer.cornerRadius = 8 imageView.contentMode = .scaleAspectFit + imageView.clipsToBounds = true return imageView }() diff --git a/Pinit/Pinit/Views/PinDetail/PinDetailViewController.swift b/Pinit/Pinit/Views/PinDetail/PinDetailViewController.swift index e626b7c..e4aa819 100644 --- a/Pinit/Pinit/Views/PinDetail/PinDetailViewController.swift +++ b/Pinit/Pinit/Views/PinDetail/PinDetailViewController.swift @@ -186,7 +186,7 @@ extension PinDetailViewController { self.useCase.updatePin(pin: pin) self.updatePinNoti!(self.pinEntity, pin) self.pinEntity = pin - // 디테일 화면 수정 + #warning("업데이트 후 헤더 업데이트 해줘야함ㅇㅇ") } vc.modalPresentationStyle = .fullScreen self.present(vc, animated: true, completion: nil) diff --git a/Pinit/Pinit/Views/PinEdit/PinEditViewController.swift b/Pinit/Pinit/Views/PinEdit/PinEditViewController.swift index e274be2..f321f59 100644 --- a/Pinit/Pinit/Views/PinEdit/PinEditViewController.swift +++ b/Pinit/Pinit/Views/PinEdit/PinEditViewController.swift @@ -286,7 +286,7 @@ final class PinEditViewController: UIViewController, UITextViewDelegate { let imagePicker = UIImagePickerController() imagePicker.sourceType = sourceType imagePicker.delegate = self - imagePicker.allowsEditing = true +// imagePicker.allowsEditing = true present(imagePicker, animated: true, completion: nil) } From 67aa4498fa5398040d4a3d234ada4c58ced117ae Mon Sep 17 00:00:00 2001 From: JungHm Date: Sat, 22 Mar 2025 00:24:47 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[Fix]=20#33=20=EC=96=B4=EB=8C=91=ED=84=B0?= =?UTF-8?q?=20delegate=20=EB=B3=80=EA=B2=BD=20(indexPath=EB=8F=84=20?= =?UTF-8?q?=EA=B0=99=EC=9D=B4=20=EB=84=98=EA=B9=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Pinit/Pinit/Views/Home/HomeViewController.swift | 4 ++-- .../Pinit/Views/Home/PinCollectionViewAdapter.swift | 8 ++++---- .../Pinit/Views/PastPin/PastPinViewController.swift | 12 +++++------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Pinit/Pinit/Views/Home/HomeViewController.swift b/Pinit/Pinit/Views/Home/HomeViewController.swift index 3287c30..8c3720e 100644 --- a/Pinit/Pinit/Views/Home/HomeViewController.swift +++ b/Pinit/Pinit/Views/Home/HomeViewController.swift @@ -211,11 +211,11 @@ extension HomeViewController: CLLocationManagerDelegate { // MARK: PinCollectionViewAdapterDelegate extension HomeViewController: PinCollectionViewAdapterDelegate { - func selectedItem(selected: PinEntity) { + func selectedItem(selected: PinEntity, indexPath: IndexPath) { presentPinDetailViewController(selected: selected) } - func deletedItem(deleted: PinEntity?) { + func deletedItem(deleted: PinEntity?, indexPath: IndexPath) { guard let deleted = deleted else { return } usecase.deletePin(pinID: deleted.pin_id) removePinEntity(pinEntity: deleted) diff --git a/Pinit/Pinit/Views/Home/PinCollectionViewAdapter.swift b/Pinit/Pinit/Views/Home/PinCollectionViewAdapter.swift index 40ad348..5ddd61d 100644 --- a/Pinit/Pinit/Views/Home/PinCollectionViewAdapter.swift +++ b/Pinit/Pinit/Views/Home/PinCollectionViewAdapter.swift @@ -10,9 +10,9 @@ import UIKit // MARK: CollectionView Adapter Delegate protocol PinCollectionViewAdapterDelegate: AnyObject { // 선택된 아이템 넘겨줌 - func selectedItem(selected: PinEntity) + func selectedItem(selected: PinEntity, indexPath: IndexPath) // 삭제된 아이템 넘겨줌 (id만 넘겨줄지 고민중 CoreData에서 id에 따라 삭제하는거 말고는 필요 없어서) - func deletedItem(deleted: PinEntity?) + func deletedItem(deleted: PinEntity?, indexPath: IndexPath) } // MARK: CollectionView Adapter @@ -60,7 +60,7 @@ extension PinCollectionViewAdapter: UICollectionViewDataSource { // MARK: CollectionView Delegate extension PinCollectionViewAdapter: UICollectionViewDelegate { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - delegate?.selectedItem(selected: data[indexPath.row]) // 선택된 아이템 delegate로 보냄 + delegate?.selectedItem(selected: data[indexPath.row], indexPath: indexPath) // 선택된 아이템 delegate로 보냄 } func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemsAt indexPaths: [IndexPath], point: CGPoint) -> UIContextMenuConfiguration? { @@ -70,7 +70,7 @@ extension PinCollectionViewAdapter: UICollectionViewDelegate { return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { elements in let deleteAction = UIAction(title: "삭제", image: UIImage(systemName: "trash"), attributes: .destructive) {[weak self] action in let deleted = self?.data.remove(at: indexPath.row) - self?.delegate?.deletedItem(deleted: deleted) // 삭제된 아이템 delegate로 보냄 + self?.delegate?.deletedItem(deleted: deleted, indexPath: indexPath) // 삭제된 아이템 delegate로 보냄 } return UIMenu(title: "", children: [deleteAction]) } diff --git a/Pinit/Pinit/Views/PastPin/PastPinViewController.swift b/Pinit/Pinit/Views/PastPin/PastPinViewController.swift index e1869d6..9bef626 100644 --- a/Pinit/Pinit/Views/PastPin/PastPinViewController.swift +++ b/Pinit/Pinit/Views/PastPin/PastPinViewController.swift @@ -149,22 +149,20 @@ extension PastPinViewController : FSCalendarDelegate, FSCalendarDataSource, FSCa //MARK: - extension extension PastPinViewController : PinCollectionViewAdapterDelegate { - func selectedItem(selected: PinEntity) { //화면 이동 + func selectedItem(selected: PinEntity, indexPath: IndexPath) { //화면 이동 let vc = PinDetailViewController(selected, isPin: true) vc.deletePinNoti = { pin in - guard let data = self.adapter?.data else { return } - self.adapter?.data = data.filter { $0.pin_id != pin.pin_id } + self.adapter?.data.remove(at: indexPath.row) self.PinCollectionView.reloadData() } vc.updatePinNoti = { before, after in - guard let data = self.adapter?.data else { return } - data.first{ $0.pin_id == before.pin_id } - + self.adapter?.data[indexPath.row] = after + self.PinCollectionView.reloadData() } present(vc, animated: true) } - func deletedItem(deleted: PinEntity?) { //아이템 삭제 클릭시 + func deletedItem(deleted: PinEntity?, indexPath: IndexPath) { //아이템 삭제 클릭시 guard let deleted = deleted else { return } usecase.deletePin(pinID: deleted.pin_id) self.pinData = pinData.filter{ $0.pin_id != deleted.pin_id } From b68eee90b90efc1e90e159b485231673a56f3bc4 Mon Sep 17 00:00:00 2001 From: HISEHOONAN Date: Sat, 22 Mar 2025 01:07:17 +0900 Subject: [PATCH 5/5] [FIX] #33 Error Handling --- .../Extensions/Extension_UIViewController.swift | 3 ++- Pinit/Pinit/Views/Home/CustomBottomSheet.swift | 1 + Pinit/Pinit/Views/Home/HomeViewController.swift | 14 ++++++++++++-- .../Views/PinDetail/PinDetailViewController.swift | 6 +++++- .../Views/PinEdit/PinEditViewController.swift | 13 +++++++++---- 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/Pinit/Pinit/Extensions/Extension_UIViewController.swift b/Pinit/Pinit/Extensions/Extension_UIViewController.swift index c509472..e07bcee 100644 --- a/Pinit/Pinit/Extensions/Extension_UIViewController.swift +++ b/Pinit/Pinit/Extensions/Extension_UIViewController.swift @@ -35,7 +35,8 @@ extension UIViewController { // Container view for the toast let containerView = UIView() - containerView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.6) +// containerView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.6) + containerView.backgroundColor = DesignSystemColor.Lavender.value.withAlphaComponent(0.9) containerView.layer.cornerRadius = 4 containerView.clipsToBounds = true blockingView.addSubview(containerView) diff --git a/Pinit/Pinit/Views/Home/CustomBottomSheet.swift b/Pinit/Pinit/Views/Home/CustomBottomSheet.swift index 1e297b3..e56262a 100644 --- a/Pinit/Pinit/Views/Home/CustomBottomSheet.swift +++ b/Pinit/Pinit/Views/Home/CustomBottomSheet.swift @@ -20,6 +20,7 @@ final class CustomBottomSheet: UIView { grabber.isUserInteractionEnabled = false //Grabber는 Guide용으로만 사용 return grabber }() + init() { super.init(frame: .zero) setupLayout() diff --git a/Pinit/Pinit/Views/Home/HomeViewController.swift b/Pinit/Pinit/Views/Home/HomeViewController.swift index 8c3720e..ae8ff33 100644 --- a/Pinit/Pinit/Views/Home/HomeViewController.swift +++ b/Pinit/Pinit/Views/Home/HomeViewController.swift @@ -58,6 +58,11 @@ class HomeViewController: UIViewController { setupLayout() } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + loadAnnotations() + } + private func setupMapLocation() { locationmanager.delegate = self mapView.delegate = self @@ -73,7 +78,7 @@ class HomeViewController: UIViewController { animated: true ) mapView.isRotateEnabled = false -// mapView.register(CustomAnnotationView.self, forAnnotationViewWithReuseIdentifier: CustomAnnotationView.identifier) + // mapView.register(CustomAnnotationView.self, forAnnotationViewWithReuseIdentifier: CustomAnnotationView.identifier) mapView.register(MKMarkerAnnotationView.self, forAnnotationViewWithReuseIdentifier: "annotation") mapView.register(CustomClusterAnnotationView.self, forAnnotationViewWithReuseIdentifier: CustomClusterAnnotationView.identifier) @@ -81,10 +86,13 @@ class HomeViewController: UIViewController { } private func loadAnnotations() { + mapView.removeAnnotations(mapView.annotations) usecase.fetchAllPins { pins in let annotations = pins.map { CustomAnnotation(pinData: $0) } self.mapView.addAnnotations(annotations) self.mapView(self.mapView, regionDidChangeAnimated: true) + self.adapter?.data = pins.sorted(by: { $0.date > $1.date }) + self.bottomSheet.collectionView.reloadData() } } @@ -152,7 +160,7 @@ extension HomeViewController: MKMapViewDelegate { let view = mapView.dequeueReusableAnnotationView(withIdentifier: "annotation", for: annotation) as! MKMarkerAnnotationView view.annotation = annotation view.clusteringIdentifier = "pinCluster" // 클러스터링 가능하게 - + return view } @@ -257,6 +265,8 @@ extension HomeViewController { mapView.removeAnnotation(annotationToRemove) } mapView(mapView, regionDidChangeAnimated: true) + adapter?.data = adapter?.data.filter{$0.pin_id != pinEntity.pin_id} ?? [] + bottomSheet.collectionView.reloadData() } } diff --git a/Pinit/Pinit/Views/PinDetail/PinDetailViewController.swift b/Pinit/Pinit/Views/PinDetail/PinDetailViewController.swift index e4aa819..d003ca7 100644 --- a/Pinit/Pinit/Views/PinDetail/PinDetailViewController.swift +++ b/Pinit/Pinit/Views/PinDetail/PinDetailViewController.swift @@ -191,12 +191,16 @@ extension PinDetailViewController { vc.modalPresentationStyle = .fullScreen self.present(vc, animated: true, completion: nil) } + let deleteAction = UIAlertAction(title: "삭제", style: .destructive) { _ in print("삭제") self.useCase.deletePin(pinID: (self.pinEntity.pin_id)) self.deletePinNoti?(self.pinEntity) - self.dismiss(animated: true, completion: nil) + self.dismiss(animated: true){ + self.showToast(message: "삭제가 완료되었습니다.") + } } + let cancelAction = UIAlertAction(title: "취소", style: .cancel, handler: nil) actionSheet.addAction(editAction) diff --git a/Pinit/Pinit/Views/PinEdit/PinEditViewController.swift b/Pinit/Pinit/Views/PinEdit/PinEditViewController.swift index f321f59..6dcbf1a 100644 --- a/Pinit/Pinit/Views/PinEdit/PinEditViewController.swift +++ b/Pinit/Pinit/Views/PinEdit/PinEditViewController.swift @@ -248,6 +248,11 @@ final class PinEditViewController: UIViewController, UITextViewDelegate { //MARK: 저장버튼 눌림 @objc private func saveButtonTapped() { + guard let text = titleTextField.text, !text.isEmpty else { + self.showToast(message: "제목을 입력해주세요.") + return + } + pinEntity?.title = titleTextField.text ?? "" pinEntity?.description = contentTextView.text ?? "" @@ -286,7 +291,7 @@ final class PinEditViewController: UIViewController, UITextViewDelegate { let imagePicker = UIImagePickerController() imagePicker.sourceType = sourceType imagePicker.delegate = self -// imagePicker.allowsEditing = true + // imagePicker.allowsEditing = true present(imagePicker, animated: true, completion: nil) } @@ -342,9 +347,9 @@ extension PinEditViewController: UIImagePickerControllerDelegate, UINavigationCo self.pickedImage = selectedImage cameraButton.backgroundColor = .clear cameraButton.setImage(nil, for: .normal) -// -// // 이미지를 버튼 크기에 맞게 조정하여 설정 -// let resizedImage = resizeImage(image: pickedImage, targetSize: CGSize(width: 150, height: 150)) + // + // // 이미지를 버튼 크기에 맞게 조정하여 설정 + // let resizedImage = resizeImage(image: pickedImage, targetSize: CGSize(width: 150, height: 150)) cameraButton.clipsToBounds = true cameraButton.layer.cornerRadius = 75