16주차는 홈화면 구현을 마치고 아트 맵 인터페이스를 설계하고 UI와 지도 이벤트를 구현했다.
아트맵
아트맵 구현에 있어서 가장 중요했던 것은 사용자의 위치 정보를 정확하게 처리하는 것이었다. 이를 위해 CoreLocation과 RxSwift를 결합하여 LocationService를 구현했는데, 이 과정이 꽤 도전적이었다. LocationService는 위치 권한 상태를 관찰하고 위치 정보를 받아오는 두 가지 주요 기능을 담당한다.
var locationManager: CLLocationManager?
private let authorizationStatus = BehaviorSubject<CLAuthorizationStatus>(value: .notDetermined)
private let locationSubject = PublishSubject<CLLocation>()
BehaviorSubject를 사용해 위치 권한 상태를 관리하고, PublishSubject로 위치 정보를 스트림 형태로 제공한다. 또, CLLocationManagerDelegate를 채택하여 위치 업데이트와 오류 처리를 담당하며, 이를 RxSwift의 Observable로 변환하여 반응형으로 처리했다.
final class MapRepository: MapRepositoryProtocol {
...
private let locationService = LocationService()
func checkUserCurrentLocationAuthorization() {
self.locationService.observeUpdateAuthorization()
.subscribe(with: self, onNext: { owner, status in
switch status {
case .notDetermined:
owner.locationService.requestAuthorization()
case .authorizedAlways, .authorizedWhenInUse:
owner.authorizationStatus.onNext(.allowed)
owner.requestUserLocation()
case .denied, .restricted:
owner.authorizationStatus.onNext(.disallowed)
default:
owner.authorizationStatus.onNext(.notDetermined)
}
})
.disposed(by: disposeBag)
}
...
}
구현한 LocationService는 아트맵 레포지토리에서 사용된다. checkUserCurrentLocationAuthorization은 위치 권한 체크 메소드이다. LocationService로부터 권한 상태를 관찰하고, 권한 상태에 따라 분기처리를 해서 적절한 처리를 수행한다. 권한이 허용 된 경우 사용자의 위치 요청 메소드인 requestUserLocation()를 통해 사용자 위치를 요청한다.
지도 이벤트
지도 이벤트는 디자이너의 요구사항에 맞춰 두 가지를 구현했다. 첫번째는 사용자의 위치 권한이 승인되면 현재 위치로 지도 카메라를 이동시키고 사용자 위치를 표시하는 마커와 오버레이를 추가하는 것이었다. 두번째는 지도에 표시된 문화예술 마커를 클릭했을 때 해당 콘텐츠의 정보를 보여주는 모달을 띄우는 것이었다. 네이버 지도 SDK에서 제공하는 카메라 이동 애니메이션과 마커, 오버레이 기능들을 활용하여 쉽게 구현할 수 있었다.
번아웃 .. ? 과 앞으로의 계획
지난 시간을 되돌아보면 개인적인 압박감 속에서 쉼 없이 달려온 것 같다. 개인적인 일들과 아르바이트를 병행하면서 학습과 프로젝트를 진행하다 보니 점점 지쳐가는 것을 느낀다. 이제는 조금 여유를 가지면서 나아가야겠다는 생각이 든다. 현재 진행 중인 프로젝트를 마무리하고 애플 디벨로퍼 아카데미에 들어가기 전, 혼자만의 시간을 가지기 위해 일본 여행을 계획하고 있다.
이전 일본 여행에서 일본 친구를 사귀었던 좋은 기억이 있다. 당시에는 일본어를 하지 못해 번역기를 통해 대화했다. 이번에는 약 4개월 동안 일본어를 독학하여 현지인들과 직접 대화를 나누고 새로운 친구를 사귀는 것이 목표이다.
일본어 학습을 위해 기초부터 차근차근 준비하고 있다. 프로젝트에 차질 없이 자투리 시간을 이용해서 공부할 생각이다. 이번 여행을 통해 새로운 인연도 만들고, 지친 마음도 재충전했으면 좋겠다.. !
'우리 같이 협업하자' 카테고리의 다른 글
[우협하] 키체인 도입 (0) | 2024.11.05 |
---|---|
[우협하] 수평 컬렉션 뷰를 커스텀해보자. - 동적 배경과 페이징 효과 (0) | 2024.10.21 |
[우협하] 13~15주차 회고 (1) | 2024.10.21 |
[우협하] 9~12주차 회고 (4) | 2024.09.29 |
[우협하/문제해결] 네이버 다이나믹맵에서 자동으로 카메라 무브가 발생하는 원인을 해결해보자. (5) | 2024.09.02 |