[FAQ] 지도/로컬 API 문의 전 꼭 읽어 주세요.
지도 로드는 되는데 마커가 화면에 출력이 안됩니다.
어떤 걸 빠뜨리고 있는지 알려주실분 ㅠㅠ
import SwiftUI
import KakaoMapsSDK
struct Coordinate {
let longitude: Double
let latitude: Double
}
struct ProximitySorter {
struct Coordinate {
let name: String
let longitude: Double
let latitude: Double
}
}
// 🟡 메인 뷰
struct ContentView2: View {
@State private var draw: Bool = true
@State private var sortedCoordinates: [ProximitySorter.Coordinate] = []
let coordinates: [Coordinate] = [
Coordinate(longitude: 127.108678, latitude: 37.402001),
Coordinate(longitude: 127.110678, latitude: 37.404001)
]
var body: some View {
KakaoMapView(draw: $draw, sortedCoordinates: $sortedCoordinates, coordinates: coordinates)
.edgesIgnoringSafeArea(.all)
}
}
// 🟡 KakaoMapView
struct KakaoMapView: UIViewRepresentable {
@Binding var draw: Bool
@Binding var sortedCoordinates: [ProximitySorter.Coordinate]
var coordinates: [Coordinate]
func makeUIView(context: Context) -> KMViewContainer {
let view = KMViewContainer(frame: UIScreen.main.bounds)
context.coordinator.createController(view)
return view
}
func updateUIView(_ uiView: KMViewContainer, context: Context) {
if draw {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
if context.coordinator.controller?.isEnginePrepared == false {
context.coordinator.controller?.prepareEngine()
}
if context.coordinator.controller?.isEngineActive == false {
context.coordinator.controller?.activateEngine()
}
context.coordinator.addViews()
}
} else {
context.coordinator.controller?.pauseEngine()
context.coordinator.controller?.resetEngine()
}
}
func makeCoordinator() -> Coordinator {
Coordinator(coordinates: coordinates, sortedCoordinates: $sortedCoordinates)
}
class Coordinator {
var controller: KMController?
var coordinates: [Coordinate]
@Binding var sortedCoordinates: [ProximitySorter.Coordinate]
init(coordinates: [Coordinate], sortedCoordinates: Binding<[ProximitySorter.Coordinate]>) {
self.coordinates = coordinates
self._sortedCoordinates = sortedCoordinates
}
func createController(_ view: KMViewContainer) {
controller = KMController(viewContainer: view)
}
func addViews() {
guard let controller = controller else { return }
let defaultPosition = MapPoint(longitude: 127.108678, latitude: 37.402001)
let mapViewInfo = MapviewInfo(
viewName: "MainMapView",
//viewInfoName: "Default",
defaultPosition: defaultPosition
//defaultLevel: 10
)
controller.addView(mapViewInfo)
// 마커 추가 예시 (POI)
}
func createLabelLayer(view: KakaoMap) {
let manager = view.getLabelManager()
let layerOption = LabelLayerOptions(layerID: "PoiLayer", competitionType: .none, competitionUnit: .symbolFirst, orderType: .rank, zOrder: 1000)
_ = manager.addLabelLayer(option: layerOption)
}
func createPois(view: KakaoMap) {
let manager = view.getLabelManager()
let layer = manager.getLabelLayer(layerID: "PoiLayer")
let poiOption = PoiOptions(styleID: "PerLevelStyle")
let poi = layer?.addPoi(option: poiOption, at: MapPoint(longitude: 127.108678, latitude: 37.402001))
let imageName = "gps.png"
poi?.show()
}
}
}