[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")
}