[TIL] 2021.02.21

승아·2021년 2월 21일
0

👩🏻‍💻 오늘 공부한 내용

MapKit 으로 Apple 지도 마커 생성 (MapKit | Apple Developer, 참고 사이트 )

  • MKCoordinateSpan() : 줌레벨 설정. 값이 작을 수록 더 높은 줌레벨.
  • MKAnnotation() : 마커
// 애플 가로수길 위도, 경도
let coordinate = CLLocationCoordinate2D(latitude: 37.52086970595338, longitude: 127.0227724313736)
// 줌레벨 설정
let span = MKCoordinateSpan(latitudeDelta: 0.003, longitudeDelta: 0.003)
let region = MKCoordinateRegion(center: coordinate, span: span)
self.mapView.setRegion(region, animated: true)

// 마커 생성
let annotation = MKPointAnnotation()
annotation.coordinate = coordinate // 마커 좌표
annotation.title = "Apple 가로수길" // 마커 이름
self.mapView.addAnnotation(annotation)
self.mapView.setUserTrackingMode(.follow, animated: true)

MapKit 으로 위치 검색 자동완성 ( 참고 사이트 )

  1. MKLocalSearchCompleter : queryFragment 키워드 입력
extension SearchPlaceViewController: UISearchBarDelegate{
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        if searchText == "" {
            searchResults.removeAll()
            searchResultTableView.reloadData()
        }
        
        // 사용자가 search bar 에 입력한 text를 자동완성 대상에 넣는다
        searchCompleter.queryFragment = searchText
    }
    
    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        dismiss(animated: true, completion: nil)
    }
}
  1. MKLoacalSearchCompletion : 자동 완성 결과. 배열 형태로 받음
extension SearchPlaceViewController {
    // 자동완성 완료시 결과를 받는 method
    func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) {
        searchResults = completer.results
        searchResultTableView.reloadData()
    }
    
    func completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error) {
        print("---> error : \(error)")
    }
}
  1. MKLocalSearch.Request : completion 객체로 request 객체 생성
  2. MKLocalSearch : start의 completion handler에서 request하며 받은 reponse로 위치 정보 받기
// 선택된 위치의 정보 가져오기
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let selectedResult = searchResults[indexPath.row]
    let searchRequest = MKLocalSearch.Request(completion: selectedResult)
    let search = MKLocalSearch(request: searchRequest)
    search.start { (response, error) in
        guard error == nil else{
            print("---> error : \(String(describing: error))")
            return
        }
        guard let placeMark = response?.mapItems[0].placemark else {
            return
        }
        let lat =  placeMark.coordinate.latitude
        let lng = placeMark.coordinate.longitude
        print("----> coordinate : \(lat) \(lng)")
    }
}

✍🏻 오늘은...

네이버 맵, 카카오 맵, 구글 맵 다 돌고 MapKit 존재 알아버리기••• 다른 앱은 장소 추가를 어떻게 표현했는지 둘러보던 중 apple 지도를 사용하는걸 발견했다. 왜 그동안 애플지도 사용할 생각을 안했을까.. 지금이라도 발견한게 천만다행이다. 구글맵 자동완성기능은 몇 번 검색안했는데도 요청횟수가 불어 친구들도 사용한다면 돈을 내야되기 때문에..ㅋ 백수인 나는 MapKit이 역시 좋다 😭 주말엔 나도모르게 게을러지지만 다행히 오늘은 컴퓨터 앞에 앉기 성공했다! 약속이 있어도 1일1커밋 습관 잃지 말자 .. ⭐️ 내일도 화이팅! 이번주에 완성해보자!

0개의 댓글