안녕하세요
이번주에는 기능 추가 구현에 집착하지 않고
내 친구 지피티가 (많이) 도와준 내 코드 잘 이해하고 공부하기!
import UIKit // UIKit 프레임워크 가져오기 (UI 관련 기능 제공)
import NMapsMap // 네이버 지도(Naver Maps) SDK 가져오기
class ViewController: UIViewController { // UIViewController를 상속받아 화면 컨트롤러(ViewController) 정의
// MARK: - Properties
let markerManager = MarkerManager() // 마커를 관리하는 객체 생성
var popUpVC: PopUpView? // 팝업 뷰를 표시할 객체 (옵셔널)
@IBOutlet weak var naverMapView: NMFNaverMapView! // 네이버 지도 뷰 연결
@IBOutlet weak var addMarkerButton: UIButton! // 마커 추가 버튼 연결
@IBOutlet weak var searchBar: UISearchBar! // 검색 바 연결
@IBOutlet weak var showListButton: UIButton! // 리스트 보기 버튼 연결
// MARK: - Lifecycle
override func viewDidLoad() { // 뷰가 로드될 때 실행되는 메서드 (라이프사이클 메서드 중 하나)
super.viewDidLoad() // 부모 클래스의 viewDidLoad() 호출
setupNaverMapView() // 네이버 지도 설정 메서드 호출
loadMarkers() // Firestore에서 마커 데이터 로드
popUpVC = PopUpView(parentView: self.view) // PopUpView 초기화 및 연결
NotificationCenter.default.addObserver(self, selector: #selector(reloadMarkers), name: .smokingAreaAdded, object: nil) // 흡연구역이 추가될 때 알림을 받아 reloadMarkers 실행
}
@objc private func reloadMarkers() { // @objc를 붙여 NotificationCenter에서 호출할 수 있도록 함
print("✅ 새로운 흡연구역이 추가되어 마커를 새로 불러옵니다.") // 로그 출력
loadMarkers() // 마커 다시 불러오기
}
// MARK: - Setup Methods
private func setupNaverMapView() { // 네이버 지도 초기 설정을 수행하는 메서드
let initialLocation = NMGLatLng(lat: 37.500920152198, lng: 127.03618231961) // 초기 위치 설정 (위도, 경도 지정)
let cameraUpdate = NMFCameraUpdate(scrollTo: initialLocation) // 카메라 이동 설정
naverMapView.mapView.moveCamera(cameraUpdate) // 카메라 이동 실행
naverMapView.showLocationButton = true // 현재 위치 버튼 표시
}
// MARK: - Firestore 데이터 불러와서 마커 추가
private func loadMarkers() { // Firestore에서 마커 정보를 가져오는 메서드
FirestoreManager.shared.fetchSmokingAreas { [weak self] smokingAreas in // Firestore에서 흡연구역 데이터를 가져옴
guard let self = self else { return } // self가 nil이면 함수 종료
self.markerManager.addMarkers(for: smokingAreas, to: self.naverMapView.mapView, viewController: self) // 지도에 마커 추가
}
}
// MARK: - 팝업 정보 표시
func showPopUpInfo(for smokingArea: SmokingArea) { // 특정 흡연구역 정보를 팝업으로 표시하는 메서드
popUpVC?.showInfo(for: smokingArea) // PopUpView에서 정보 표시
}
// MARK: - Actions
@IBAction func addMarkerButtonTapped(_ sender: UIButton) { // 마커 추가 버튼을 눌렀을 때 실행되는 메서드
let storyboard = UIStoryboard(name: "Main", bundle: nil) // Main.storyboard 가져오기
if let addVC = storyboard.instantiateViewController(withIdentifier: "AddSmokeAreaViewController") as? AddSmokeAreaViewController { // AddSmokeAreaViewController 인스턴스 생성
addVC.modalPresentationStyle = .fullScreen // 전체 화면으로 표시 설정
present(addVC, animated: true, completion: nil) // 화면 전환 실행
} else {
print("AddSmokeAreaViewController를 찾을 수 없음") // 오류 발생 시 로그 출력
}
}
@IBAction func showListButtonTapped(_ sender: UIButton) { // 리스트 보기 버튼을 눌렀을 때 실행되는 메서드
let storyboard = UIStoryboard(name: "Main", bundle: nil) // Main.storyboard 가져오기
if let listVC = storyboard.instantiateViewController(withIdentifier: "ListViewController") as? ListViewController { // ListViewController 인스턴스 생성
listVC.modalPresentationStyle = .fullScreen // 전체 화면으로 표시 설정
present(listVC, animated: true, completion: nil) // 화면 전환 실행
} else {
print("ListViewController를 찾을 수 없음") // 오류 발생 시 로그 출력
}
}
}
뷰컨 파일 공부 완~
'iOS > 흡구오디' 카테고리의 다른 글
[흡구오디] 내비게이션 컨트롤러 코드로 구현하기 | 화면 이동 (0) | 2025.07.16 |
---|---|
[흡구오디] 스토리보드 파일 없애고 코드로 새롭게 시작하기 (0) | 2025.07.16 |
[흡구오디] 마커 터치 시 팝업으로 정보 표시해주기!를 하기 위한,,, (0) | 2025.02.14 |
[흡구오디] 흡연구역 등록하기 | 지도 위치 넘겨주기, 첫 화면으로 돌아가기 (0) | 2025.02.14 |
[흡구오디] 새로운 흡연구역 추가 기능 구현하기 | 🙊 (0) | 2025.01.19 |