[FAQ] 지도/로컬 API 문의 전 꼭 읽어 주세요.
https://devtalk.kakao.com/t/faq-api/125610
안녕하세요. 구 SDK 종료로, SDK v2.0 으로 앱 업데이트를 진행하고있습니다.
Android 와 iOS 둘다 네이티브로 진행중이고, 각각 Kotlin 과 Swift 로 개발 진행중입니다.
관련하여서, 지도에서 POI 쪽에 마커와, 마커를 클릭시에 동작을 위해서 해당 부분에 리스너를 달아 동작하고있는데,
리스너 자체가 느리게 동작하는 느낌입니다…
기존에 daum맵에서는 마커를 클릭하면 바로 리스너에 달아둔 동작이 작동했는데,
현재 변경된 부분에서는 Android는 0.2초… iOS 는 1초정도… 딜레이 이후에 리스너에 달아둔 동작이 작동하고있습니다.
내부적으로 로그를 찍어볼때는 클릭리스너 자체에서 인식하는게 느린것같아보여서,
아래에 첨부된 코드에서 혹시 문제가 되는 부분이 있다면 알려주시면 감사하겠습니다,
Android :
class MapKakaoFragment : BaseFragment(), KakaoMap.OnMapClickListener, KakaoMap.OnLabelClickListener {
// 초기 implement로 호출
mapView!!.start(object : MapLifeCycleCallback() {
override fun onMapDestroy() {
mapView!!.finish()
}
override fun onMapError(error: Exception) {
}
}, object : KakaoMapReadyCallback() {
override fun onMapReady(kakaoMap: KakaoMap) {
// 인증 후 API 가 정상적으로 실행될 때 호출됨
LogUtil.d(TAG, "Kakao Map onReady")
mKakaoMap = kakaoMap
labelLayer = kakaoMap.labelManager!!.layer!!
// 라벨 클릭 리스너 달아두기
mKakaoMap.setOnLabelClickListener{ kakaoMap, labelLayer, label ->
LogUtil.d(TAG, "KakaoMap : " + kakaoMap + " , LabelLayer : " + labelLayer + " , Label : " + label )
onLabelClicked(kakaoMap, labelLayer, label)
}
// 기타 내용들 불러오는 함수
initMapView(mCurrentLocation)
}
/// overide 된 클릭 리스너
override fun onLabelClicked(p0: KakaoMap?, p1: LabelLayer?, p2: Label?) {
// TODO(“Not yet implemented”)
LogUtil.d(TAG, "onLabelClicked(), KakaoMap : " + p0 + " , LabelLayer : " + p1 + " , Label : " + p2 )
// 이후 라벨 생성
val pos = LatLng.from(vo.latitude.toDouble(), vo.longitude.toDouble())
// 라벨 스타일 생성
val styles: LabelStyles? = kakaoMap.labelManager?.addLabelStyles(
LabelStyles.from(
LabelStyle.from(StoreUtil.getDelegateStoreTypeIcon(vo.storeTypeIcon))
.setIconTransition(LabelTransition.from(Transition.None, Transition.None))
)
)
// 라벨 생성
labelLayer.addLabel(LabelOptions.from(vo.storeName, pos).setStyles(styles).setClickable(true))
안드로이드에서는 POI maker 에서 Label로 변경된것으로 공식문서상에서는 보여, Label을 이용하였습니다.
iOS. :
func addViews() {
let defaultPosition: MapPoint = MapPoint(longitude: Double(self.currentLongitude), latitude: Double(self.currentLatitude))
let mapviewInfo: MapviewInfo = MapviewInfo(viewName: “mapview”, appName: “openmap”, viewInfoName: “map”, defaultPosition: defaultPosition, defaultLevel: 16)
mapController?.addView(mapviewInfo)
}
func addViewSucceeded(_ viewName: String, viewInfoName: String) {
…
createPoiStyle()
}
func createPoiStyle() {
…
let poi = positionLayer?.addPoi(option: poiOption, at: mapPoint)
let _ = poi?.addPoiTappedEventHandler(target: self, handler: MapViewManager.poiTappedHandler(_:))
poi?.show()
}
func poiTappedHandler(_ param: PoiInteractionEventParam) {
param.poiItem.hide()
}
감사합니다