* 참고: http://apis.map.kakao.com/ios/guide/
- xcode 11.6
- swift5
1. 준비사항
- sdk 다운로드
- 개발자 등록, 앱 플랫폼 추가하여 app key발급 , bundle id 등록
- 프로젝트에 프레임워크 추가
- 프로젝트의 info.plist
: app key추가
: Privacy - Location When In Use Usage Description 추가
- 헤더 생성
( sdk가 objective-c 기반으로 만들어졌기 때문에 swift프로젝트에서 쓰려면 bridging 헤더가 필요하다. 가이드에 안나와 있음ㅠㅠ )
#ifndef Header_h
#define Header_h
#import <DaumMap/MTMapView.h>
#endif /* Header_h */
- Build Setting - Swift compiler - Objective-C Bridging Header 에 헤더 경로추가 ( ./(프로젝트명)/Header.h )
2. 소스 코드
네이버맵과 다르게 카카오맵은 swift 소스코드를 제공하지 않는다...
그나마 definition을 눌러보면 어느 정도 정리되어 있음
- 소스 코드 예시
import UIKit
public let DEFAULT_POSITION = MTMapPointGeo(latitude: 37.576568, longitude: 127.029148)
class MapViewController: UIViewController, MTMapViewDelegate {
var mapView: MTMapView?
var mapPoint1: MTMapPoint?
var poiItem1: MTMapPOIItem?
override func viewDidLoad() {
super.viewDidLoad()
// 지도 불러오기
mapView = MTMapView(frame: self.view.bounds)
if let mapView = mapView {
mapView.delegate = self
mapView.baseMapType = .standard
// 지도 중심점, 레벨
mapView.setMapCenter(MTMapPoint(geoCoord: DEFAULT_POSITION), zoomLevel: 4, animated: true)
// 현재 위치 트래킹
mapView.showCurrentLocationMarker = true
mapView.currentLocationTrackingMode = .onWithoutHeading
// 마커 추가
self.mapPoint1 = MTMapPoint(geoCoord: MTMapPointGeo(latitude: 37.585568, longitude: 127.019148))
poiItem1 = MTMapPOIItem()
poiItem1?.markerType = MTMapPOIItemMarkerType.bluePin
poiItem1?.mapPoint = mapPoint1
poiItem1?.itemName = "아무데나 찍어봄"
mapView.add(poiItem1)
// mapView.addPOIItems([poiItem1,poiItem2]
// mapView.fitAreaToShowAllPOIItems()
self.view.addSubview(mapView)
}
}
// Custom: 현 위치 트래킹 함수
func mapView(_ mapView: MTMapView!, updateCurrentLocation location: MTMapPoint!, withAccuracy accuracy: MTMapLocationAccuracy) {
let currentLocation = location?.mapPointGeo()
if let latitude = currentLocation?.latitude, let longitude = currentLocation?.longitude{
print("MTMapView updateCurrentLocation (\(latitude),\(longitude)) accuracy (\(accuracy))")
}
}
func mapView(_ mapView: MTMapView?, updateDeviceHeading headingAngle: MTMapRotationAngle) {
print("MTMapView updateDeviceHeading (\(headingAngle)) degrees")
}
}
마커와 현재 위치 모두 잘 나온다~!~!
네이버맵과 비교했을 때 덜 무거운 느낌이지만
대신 ui가 비교적 올드하고 줌레이블이라던가 트래킹모드onoff 버튼등 자잘한 기능은 스스로 구현해야 될게 많은 듯하다