주의사항 및 알려진 이슈
사용시 주의 사항
1. API의 라이프사이클 관리는 자동으로 이루어지지 않습니다.
라이프사이클은 자동으로 처리되지 않으므로, 명시적으로 필요한 시점에 API의 라이프사이클 관련함수를 호출해 주어야 합니다.
1.1 Callback 함수, 이벤트 사용시 주의
라이프사이클 관리와 마찬가지로 각종 callback 함수와 이벤트 사용시 앱의 라이프 사이클에 맞추어 실제 수행이 가능한 상태인지에 대한 처리를 해주어야 합니다. API는 이벤트 및 callback 함수 호출 시, 앱의 상태에 대한 체크를 하지 않습니다.
2. API의 렌더링 스케일.
내부적으로 화면크기 및 해상도에 관계없이 일정한 결과를 보여주기 위해, 렌더링시 배율을 계산하여 배율에 따라 확대/축소 처리하도록 되어 있습니다. API가 입력받게 되는 px단위 값들은 모두 이 배율에 영향을 받습니다. 배율값은 아래와 같이 계산된 값을 사용합니다.
let scale = [ UIScreen mainScreen ].scale / 2.0
3. 이미지 리소스를 사용할 때 해상도별로 크기가 다른 이미지를 사용하지 않도록 해야 합니다.
2번에서와 같은 이유로 모든 이미지 리소스는 렌더링시 배율값에 따라 크기가 자동으로 조절됩니다. 예를 들어 xcasset 에서 3x 이미지가 로딩되어 이를 API에 사용하게 되면 의도보다 더 크게 그려집니다.
4. Auto resize 를 사용하지 않을 경우의 주의사항
KakaoMaps SDK는 OpenGL, Metal, Vulkan 등의 그래픽스 API를 지원할 수 있는 것을 고려하여 설계되었습니다. 이를 위해 실제 지도의 렌더링은 KMViewContainer 에서 실제 사용될 그래픽스 API에 맞는 child view를 추가하고 이 child view에서 수행됩니다. 이에 따라, KMViewContainer의 크기가 변경되는 경우에는 KMViewContainer의 크기가 변경되는 시점에 KMViewContainer의 크기를 받아서 내부의 child view의 크기를 변경해 주어야 합니다. 이를 위해 KMViewContainer의 child view를 생성할 때 auto resize mask를 지정합니다. 다만 코드를 통해 constraint를 직접 지정하여 뷰의 크기를 조절하는 방법을 사용하는 경우 이 방법이 정상적으로 동작하지 않을 수 있습니다. 이 경우에는 KMViewContainer의 크기가 변경되는 시점에 child view의 크기게 함께 변경될 수 있도록 처리해 주어야 합니다.
5. 지도 뷰를 UITableView의 셀로 넣어서 사용하는 것은 권장하지 않습니다. 테이블 뷰에 지도 뷰가 들어갈 경우 정상동작하지 않을 수 있습니다.
KakaoMapsSDK는 반복적으로 recycle 되는 형태로 사용하도록 고려되지 않았습니다. 사용하려면 뷰가 재사용되지 않거나 재사용시 초기화되지 않도록 해야 합니다.
6. 로고 표시 정책
KakaoMapsSDK를 사용시 기본적으로 우하단에 로고가 표시됩니다. 이에 대한 변경이나 가림은 허용되지 않습니다. 앱의 UI 구성상 지속적으로 로고가 가려지게 되는 경우
kakaoMap.setLogoPosition(origin: GuiAlignment(vAlign: .middle, hAlign: .right), position: CGPoint(x: 2.0, y: 2.0))
위와 같은 형태로 로고의 위치를 옮길 수 있습니다. 다만 일시적으로 보여지는 오버레이와 같은 형태로 인해 잠깐 가려지는 경우에 대해서는 로고가 일시적으로 가려지는 것이 허용됩니다.
이 외의 경우에는 지도판에 로고가 쉽게 인지할 수 있도록 노출되어 있어야 합니다.