Я размещаю MKMapView
в структуре SwiftUI View
и имею функцию getPoint(rect:)
, которая должна преобразовывать CGRect
в MKMapView
в координаты на карте. Это работает правильно, однако, в приведенном ниже примере кода есть неприятная ошибка.
Когда я нажимаю и перетаскиваю MKMapView
, он корректно перемещается, однако, после этого, всякий раз, когда я вызываю функцию getPoint(rect:)
, печатаемые координаты всегда (-180, -180,0,0). Например, если I:
- Запустить проект.
- Нажмите на кнопку, чтобы получить правильные координаты: MKCoordinateRegion (center: __ C .CLLocationCoordinate2D (широта: 58.952740592075, долгота : -8.606628292991132), диапазон: __ C .MKCoordinateSpan (latitudeDelta: 0.4606441267309549, longitudeDelta: 0.8931584724545871))
- Нажмите и перетащите на кнопку
MKMapView
. - Нажмите на кнопку , получая неверные координаты: MKCoordinateRegion (центр: __ C .CLLocationCoordinate2D (широта: -180.0, долгота: -180.0), диапазон: __ C .MKCoordinateSpan (широтаDelta: 0.0, долготаDelta : 0.0))
Это происходит каждый раз, но не происходит, если я использую трекпад для прокрутки MKMapView
. Кажется, это происходит только при наличии логического связывания.
import MapKit
struct Parent : View {
@State var boolean: Bool = false
var body : some View {
VStack {
Child(boolean: $boolean)
Text(boolean ? "Yes" : "No")
}
}
}
struct Child : View {
var mapsView:MapsView = MapsView()
@Binding var boolean:Bool
var body : some View {
VStack {
mapsView
Button(action: {
self.mapsView.getPoint(rect: CGRect(origin: .zero, size: CGSize(width: 30, height: 30)))
self.boolean.toggle()
}) {
Text("Toggle")
}
}
}
struct MapsView: NSViewRepresentable {
var map:MKMapView = MKMapView(frame: .zero)
func makeNSView(context: Context) -> MKMapView {
map.isRotateEnabled = false
return map
}
func updateNSView(_ view: MKMapView, context: Context) {
}
func getPoint(rect: CGRect) {
let a = map.convert(rect, toRegionFrom: map)
print(a)
}
}
}