![]() | ![]() |
---|
👉 사용자의 실시간 위치를 지도에 띄울 때, 위치 좌표값은 정상적으로 받지만 카카오맵이 보이지 않음
👉 실제 위치를 사용할 때에는 viewModel.userLatitude
와 viewModel.userLongitude
가 초기값 0으로 시작하고, 위치 업데이트를 받은 후에야 실제 값으로 변경됨. MapPinView에는 위치가 업데이트될 때 지도를 새로 그리는 로직이 없음
👉 위치를 보여주는 FriendsLocationView, 카카오맵 보여주는 컨테이너인 MapPinView에 위치 업데이트 로직 생성
MapPinView.swift:
class KakaoMapCoordinator: NSObject, MapControllerDelegate {
...
// location 값이 변경될 때 지도 업데이트를 위한 메서드 추가
func updateLocation(_ newLocation: Location) {
self.location = newLocation
guard let view = controller?.getView("mapview") as? KakaoMap else {
print("view is nil in updateLocation")
return
}
// 기존 POI 삭제
let manager = view.getLabelManager()
if let layer = manager.getLabelLayer(layerID: "PoiLayer") {
layer.clearAllItems() // TODO: 맞는 메서드인지 확인 필요
}
// 새로운 POI 생성
createPois()
// 카메라 이동
let cameraUpdate = CameraUpdate.make(
target: MapPoint(longitude: newLocation.x, latitude: newLocation.y),
mapView: view
)
view.moveCamera(cameraUpdate)
}
}
FriendsLocationView.swift:
var body: some View {
ZStack {
...
}
.onChange(of: viewModel.userLatitude) { _, _ in
updateLocation()
}
.onChange(of: viewModel.userLongitude) { _, _ in
updateLocation()
}
}
짧은 지식💡 x:0, y: 0 좌표는 널 아일랜드라고 한다. 하핫.
카카오맵은 좌표가 이상하면 스카이블루 스크린을 띄워주는 듯. 다음에 같은 화면이 보이면 가장 먼저 좌표 동기화 문제를 의심해봐야겠다.