Ios poi 탭 이벤트 핸들러 기능 관련

[FAQ] 지도/로컬 API 문의 전 꼭 읽어 주세요.

안녕하세요. swiftui로 맵에 Poi를 생성하고 poi를 클릭시 해당 정보를 받을수 있는 코드를 작성하고 있습니다.

    // POI를 생성한다.
    func createPois(place: Place, layerID: String) {
        guard let mapView = mapController?.getView("mapview") as? KakaoMap else {
            return
        }
        let labelManager = mapView.getLabelManager()
        let layer = labelManager.getLabelLayer(layerID: layerID)   // 생성한 POI를 추가할 레이어를 가져온다.
        let poiOption = PoiOptions(styleID: "customStyle1") // 생성할 POI의 Option을 지정하기 위한 자료를 담는 클래스를 생성. 사용할 스타일의 ID를 지정한다.

        poiOption.rank = 0
        poiOption.addText(PoiText(text: place.name, styleIndex: 0)) // PoiTextLineStyle[0] 적용
        //poi 클릭하면 해당 스토어 선택되게 변경.
        poiOption.clickable = true

      let poi1 = layer?.addPoi(option: poiOption, at: MapPoint(longitude:place.longitude, latitude: place.latitude), callback: {(_ poi: (Poi?)) -> Void in
        })
      // poi tap event handler 추가
      let _ = poi1?.addPoiTappedEventHandler(target: self, handler: KakaoMapCoordinator.clickedButtonPoi)
      poi1?.show()

    }

    //TODO:  POI 클릭 이벤트 핸들러
    func clickedButtonPoi(_ param: PoiInteractionEventParam) {
      
      if _clickedId != param.poiItem.itemID {
        // 클릭된 POI의 ID와 기타 정보를 출력합니다.
        print("클릭된 POI: \(param.poiItem)")
        print("클릭된 POI의 레이어: \(param.poiItem.layerID)")
        
        // 클릭된 POI의 ID를 업데이트합니다.
        _clickedId = param.poiItem.itemID

      }
    }

이때, clickedButtonPoi 함수에서, 선택된 poi의 place: Place를 상속받거나 정보를 가져올 방법이 있을까요??
그리고 param.poiItem가 포함하는 정보에는 무엇무엇이 있는지 알고 싶습니다.

또, poi 클릭시 poi 스타일을 변경하는 방법이 있을까요?

POIStyleChangeSample예제에서는 아래와 같은 코드를 사용해서 "변경"버튼 클릭후에 poi 스타일이 변경되게 하던데, 다른 버튼의 클릭없이 poi 클릭시 스타일이 변경되게 하고 싶습니다.

    func createPoiStyle() {
        let view = mapController?.getView("mapview") as! KakaoMap
        let manager = view.getLabelManager()
        
        let noti1 = PoiBadge(badgeID: "badge1", image: UIImage(named: "noti.png"), offset: CGPoint(x: 0.9, y: 0.1), zOrder: 0)
        let iconStyle1 = PoiIconStyle(symbol: UIImage(named: "pin_green.png"), anchorPoint: CGPoint(x: 0.0, y: 0.5), badges: [noti1])
        let perLevelStyle1 = PerLevelPoiStyle(iconStyle: iconStyle1, level: 0)
        let poiStyle1 = PoiStyle(styleID: "customStyle1", styles: [perLevelStyle1])
        
        let noti2 = PoiBadge(badgeID: "badge2", image: UIImage(named: "noti2.png"), offset: CGPoint(x: 0.9, y: 0.1), zOrder: 0)
        let iconStyle2 = PoiIconStyle(symbol: UIImage(named: "pin_red.png"), anchorPoint: CGPoint(x: 0.0, y: 0.5), badges: [noti2])
        let perLevelStyle2 = PerLevelPoiStyle(iconStyle: iconStyle2, level: 0)
        let poiStyle2 = PoiStyle(styleID: "customStyle2", styles: [perLevelStyle2])
        
        manager.addPoiStyle(poiStyle1)
        manager.addPoiStyle(poiStyle2)
    }
    
    func createPois() {
        let view = mapController?.getView("mapview") as! KakaoMap
        let manager = view.getLabelManager()
        let layer = manager.getLabelLayer(layerID: "PoiLayer")
        let poiOption = PoiOptions(styleID: "customStyle1", poiID: "poi1")
        poiOption.rank = 0
        
        let poi1 = layer?.addPoi(option:poiOption, at: MapPoint(longitude: 127.108678, latitude: 37.402001))
        poi1?.show()
    }
    
    @IBAction func changeButtonClicked(_ sender: Any) {
        let view = mapController?.getView("mapview") as! KakaoMap
        let manager = view.getLabelManager()
        let layer = manager.getLabelLayer(layerID: "PoiLayer")
        let poi = layer?.getPoi(poiID: "poi1")
        poi?.changeStyle(styleID: "customStyle2")
    }

@_1038

  1. 생성된 poi에 userObject 속성에 필요한 정보를 담은 객체를 넣어두시면 나중에 해당 POI 에서 다시 userObject를 통해 정보를 가져오실 수 있습니다.
  2. param.poiItem은 click된 poi 객체입니다.
  3. poi clicked 이벤트를 받아서 changeStyle을 호출하시면 됩니다.