SDK v2 지도와 POI 터치 이벤트 안 됨 (KakaoMapEventDelegate)

[FAQ] 지도/로컬 API 문의 전 꼭 읽어 주세요.
https://devtalk.kakao.com/t/faq-api/125610

안녕하세요! 저는 sdk v2로 swiftUI에 카카오맵을 사용하려고 하는데요,

KakaoMapEventDelegate에서 Camera 관련
cameraWillMove, cameraDidStopped 함수는 정상적으로 작동하는데,

kakaoMapDidTapped 혹은 poiDidTapped 등 터치이벤트는 동작을 안하는 게 아니겠어요?

그래서 예제 코드에서 사용한 대로 addPoiTappedEventHandler를 활용해서 터치이벤트를 해 보려고 했는데도 작동 안 하는 것을 확인했습니다.

PoiOption.clickable = true 등 설정도 제대로 완료 했기에, 무엇이 문제인지 모르겠어서 이렇게 질문 글 남깁니다.

1개의 좋아요

추가 ) K3fMapContainerDelegate 에서의 touchesBegan 함수는 정상 작동합니다!

        //여기서 touch event 처리
        func poiTouched(_ poi: Poi) {
            print(poi.itemID)
        }
         func touchesBegan(_ touches: Set<AnyHashable>) {
             if let touch = touches.first as? UITouch {
                 let radius = touch.majorRadius
                 let touchedCenter = touch.location(in: touch.window)
                 // touch major radius기준으로 거리 재기 위한 임시 Point
                 let withRadius = CGPoint(x: touchedCenter.x + radius, y: touchedCenter.y)
                 if let point = getPosition(touchedCenter),
                 let withRadiusPoint = getPosition(withRadius)
                 {
                     // 거리 계산
                     let latdist = (point.wgsCoord.latitude - withRadiusPoint.wgsCoord.latitude)
                     let longdist = (point.wgsCoord.longitude - withRadiusPoint.wgsCoord.longitude)
                     let powdDist = latdist * latdist + longdist * longdist
                     let dist = sqrt(powdDist) // radius의 map상에서의 거리
                     
                     if let touchedPoi = touchedPOI(point.wgsCoord, dist) {
                         poiTouched(touchedPoi)
                     }
                 }
             }
        }
        private func touchedPOI(_ coord: GeoCoordinate, _ dist: Double) -> Poi? {
            if let map = controller?.getView("mapview") as? KakaoMap {
                let manager = map.getLabelManager()
                let layer = manager.getLabelLayer(layerID: "PoiLayer")
                guard let pois = layer?.getAllPois() else {return nil}
                var touchedPois: [Poi : Double] = [:] // value = distance
                for poi in pois {
                    let latdist = (coord.latitude - poi.position.wgsCoord.latitude)
                    let longdist = (coord.longitude - poi.position.wgsCoord.longitude)
                    let powdDist = latdist * latdist + longdist * longdist
                    let distWithPoi = sqrt(powdDist)
                    // touched radius 반경 안에 있는 경우
                    if distWithPoi < dist {
                        touchedPois[poi] = distWithPoi
                    }
                }
                if touchedPois.isEmpty { return nil }
                else { return touchedPois.sorted(by: {$0.value < $1.value}).first!.key} // 가장 가까운 poi를 리턴합니다.
            }
            return nil
        }
        private func getPosition(_ point: CGPoint) -> MapPoint? {
            let mapView: KakaoMap? = controller?.getView("mapview") as? KakaoMap

            guard let map = mapView else
            {return nil}
           return map.getPosition(point)
        }

이렇게 임시 구현해봤습니당, 억지구현인거 같긴 한데 임시방편으로 이렇게라도 touch event 만들어봤어요

@st939823 안녕하세요.
말씀하신 내용으로는 어떤 부분에 문제가 있는지 파악하기 어렵습니다. cameraWillMove 가 정상적으로 호출된다고 하신 것으로 보아 KakaoMapDelegate 는 정상적으로 등록된 것으로 보여서

func poiDidTapped(kakaoMap: KakaoMap, layerID: String, poiID: String, position: MapPoint)

말씀하신 내용만으로는 이 함수만 불리지 않을 이유는 없어 보입니다. 해당 delegate 함수 구현이 정확한지 확인해 보시거나 좀 더 자세한 구현관련 사항이 필요할 것 같습니다.

iOS SDK v2 ( 2.10.4) 사용중인데 동일한 증상이 있습니다.
poiDidTapped 는 layerID = place 에 대해서는 호출됩니다. 앱에서 추가한 poi에 대해서는 호출되지 않습니다.

@flymaxelib
모든 POI 에 대한 이벤트는 동일한 경로를 통해 전달됩니다. 다른 설정에 문제가 없는지 확인해 보시기 바랍니다.