iOS 프로젝트/개인 앱 - 일공이

(앱 개발/MapKit) 사용자 위치와 annotation 사이의 거리에 따라 모달창 띄우기 or 내리기

Dev.Andy 2023. 10. 11. 19:45

머리말

포스팅 이유

GitHub에 올린 PR을 좀 더 자세히 풀어 쓰면 좋을 것 같아서 포스팅을 하게 되었습니다.

요약 

(1) 사용자 위치와 가장 가까운 annotation과 거리를 계속 계산하여 도착 뷰가 뜨도록 구현했습니다.

(2) 또한 도착 뷰의 생명 주기에 따라 annoaation의 선택 또는 선택 해제하도록 하였습니다.

기능 1 기능 2

Annoation에서 멀어지면 해당 Annotation을 선택 해제 및 모달창 내리기

Annoation에서 멀어지면 해당 Annotation을 선택 해제 및 모달창 내리기

 

📌 Annoation에서 멀어지면 해당 Annotation을 선택 해제 및 모달창 내리기

  • 사용자 위치와 가장 가까운 Annoation과의 거리가 35m 이상일 경우
  • 해당 Annotation을 선택 해제 및 모달창 내리기

🔥 문제점

모달창을 내려도 무한히 함수를 호출하여 모달창을 계속 띄우는 문제 수정

 

  • 아래와 같이 사용자의 위치가 변할 때마다 무한히 함수가 호출이 됩니다.
  • 이에 대한 원인은 거리가 인접했을 때의 로직만을 구현했을 때 발생했습니다.
  • 따라서 거리가 멀어진 경우에도 로직(위의 멀어질 경우)을 구현하여 이를 방지했습니다.

 

 

 

 

 

 

GitHub Pull Request 링크

(#13) 사용자 위치와 가장 가까운 annotation에 접근 시 모달창 띄우고 멀어질 경우 내리기

사용한 메서드

1. 사용자의 위치가 변했을 때마다 호출하는 메서드

mapView(_:didUpdate:) | Apple Developer Documentation

2. 두 CLLocation 사이의 거리를 측정하는 메서드

distance(from:) | Apple Developer Documentation