View Controls
View 와 Controller
KakaoMapsSDK는 엔진부와 앱 인터페이스 부분으로 나뉘는데, 엔진은 KMViewContainer 에 내장되어 지도가 그려지는 뷰를 제공하는 역할을 하며, 엔진-앱 인터페이스 연결 및 엔진의 상태 관리는 KMController가 담당합니다. KakaoMapsSDK를 사용하기 위해서는 이 두 클래스를 사용해야 합니다.
KMViewContainer
KakaoMapsSDK에서는 UIView를 상속한 View 클래스로 KMViewContainer 클래스를 제공합니다. 지도 표시 및 API 사용을 위해서는 ViewController에 KMViewContainer 클래스를 추가해야합니다. KMViewContainer는 그려질 ViewBase의 영역을 제공하며, ViewBase는 뷰 안에 그려지는 모든 렌더링 컨텐츠와 이에 대한 컨트롤 및 이벤트를 제공합니다. 여러개의 뷰를 생성하는 경우에는 개별 뷰는 모두 각각 KMViewContainer안에서 고유의 영역을 가지게 되며, API내부의 렌더링 및 컨트롤의 처리 단위가 됩니다.
API에는 ViewBase 서브클래스로 KakaoMap 클래스를 제공합니다. KakaoMap은 지도, 스카이뷰 및 3D스카이뷰를 그릴 수 있습니다. 그리고자 하는 지도 종류에 따라 적절한 viewInfo를 이용하여 ViewBase를 생성할 수 있고, 필요에 따라 이미 생성된 ViewBase의 viewInfo를 교체하여 다른 종류의 지도로 전환할 수도 있습니다.
KMController
KMController는 KakaoMapsSDK를 사용하기 위한 인증 절차 및 내부 엔진부분과 앱 인터페이스부분과의 연결, API의 상태등을 관리합니다. KMController로 엔진의 초기화 및 Start와 Stop, 그리고 렌더링의 Status를 컨트롤 할 수 있습니다. 사용자가 원하는 시점에서 Engine의 start및 stop, 렌더링 시작/중지등을 KMController를 통해 직접 명시적으로 컨트롤 할 수 있습니다.
Life Cycle
KMController의 인터페이스를 통해 엔진의 동작을 지정 할 수 있습니다. InitEngine을 통해서 엔진의 생성 및 초기화를 합니다. startEngine을 호출하면 엔진이 시작됩니다. 단, 이 단계에서 인증되지 않은 상태면 백그라운드에서 인증을 진행합니다. 인증이 실패하면 엔진이 강제로 종료되며 실패에 대한 delegate가 호출됩니다. 엔진 시작 이후, 렌더링 준비를 마치면 KMControllerDelegate의 addViews가 호출됩니다. 해당 함수는 엔진에서 렌더링 준비를 모두 마쳤을 때 호출되므로, 이 시점에서 KMController의 addView함수를 호출하여 원하는 타입의 View를 생성할 수 있습니다. startRendering을 호출한 시점부터 뷰에 렌더링이 시작됩니다. stopRendering을 호출하면 렌더링을 멈춥니다. stopEngine을 호출하면 엔진이 stop되고, 모든 resource를 release하므로 기존에 추가했던 viewbase는 삭제되어 사용할 수 없습니다. 위와 같은 인터페이스를 통해서 엔진을 생성하거나 엔진을 멈출 수 있고, 앱의 view active/inactive상태에 따라 렌더링 상태를 컨트롤 할 수 있습니다.
기타 사항
API 사용상 이슈 발생시 필요한 정보 수집 방법
API를 사용할 때 간혹 지도가 잘 표시되지 않거나 동작이 정상적으로 되지 않는 것과 같은 이슈가 발생할 수 있습니다. 이러한 형태의 이슈를 해결하기 위해서는 API의 내부 상태 정보가 필요할 수 있습니다. 아래와 같이 KMController의 getStateDescMessage를 호출하면 API의 내부 상태 정보를 얻을 수 있습니다. API의 이슈에 대한 문의시에 이 정보를 함께 제공해주시면 더욱 빠른 지원이 가능합니다.
let msg = mapController.getStateDescMessage()
ProMotion Support
KakaoMapsSDK는 최대 120Hz의 frame rate로 지도를 표시하는 ProMotion Display를 지원합니다. 아래와 같이 KMController의 proMotionSupport를 true로 설정하면 사용할 수 있습니다. 별도로 설정하지 않을 경우, 기본값은 false입니다.
override func viewDidLoad() {
mapController = KMController(viewContainer: mapContainer!)!
mapController?.proMotionSupport = true;
}
proMotionSupport를 true로 설정할 경우, ProMotion Display가 지원되는 기기에 대해서만 프로모션이 동작합니다. proMotionSupport를 false로 설정할 경우, ProMotion은 동작하지 않습니다.
iPhone13, iPhone13 Pro Max의 경우 아래의 Key를 Info.plist에 추가해야 프로모션이 지원됩니다.
또한, KMViewContainer.proMotionDisplay를 통해서 현재 단말기의 ProMotion Display를 지원 여부를 알 수 있습니다.
override func viewDidLoad() {
mapContainer = self.view as? KMViewContainer
mapController = KMController(viewContainer: mapContainer!)!
// 프로모션 지원 여부 확인
if mapContainer.proMotionDisplay == true {
// 프로모션 Display 사용 설정
mapController?.proMotionSupport = true;
}
}
Trackpad Support
KakaoMapsSDK는 트랙패드를 통한 지도 조작을 지원합니다.