Я представляю mapView через UIViewRepresentable и хочу, чтобы изображение «target» находилось в центре карты. Это изображение блокирует как события касания, так и жесты панорамирования, которые начинаются на изображении. Поэтому добавление аннотации на карту под изображением означает, что ее выноска не может быть инициирована.
Я читал о проблемах с прозрачностью, поэтому Я переделал целевое изображение с «чистой» областью в белый цвет с непрозрачностью 1%, но без изменений в поведении.
Установка allowsHitTesting
в false также не работает, хотя, если я вставлю кнопку под изображением (Тест 1 в коде) Я могу нажать на него, но не на карту / аннотацию, поэтому, похоже, есть разница между элементами MapKit и представлениями SwiftUI, которые я добавляю сам.
import SwiftUI
import MapKit
struct ContentView: View {
var body: some View {
ZStack {
MapView()
/*Test 1*/ Button("Tap Me") {
print("Text button was tapped")
}
Image("target")
.frame(width: 90, height: 90)
.allowsHitTesting(false)
/*Test 2*/ Rectangle()
.fill(Color.red.opacity(0.2))
.frame(width: 90, height: 90)
.allowsHitTesting(false)
/*Test 3*/ Button(action: {print("Round button was tapped")}) {
Circle()
.fill(Color.red.opacity(0.2))
.frame(width: 90, height: 90)
}
.allowsHitTesting(false)
.disabled(true)
}
}
}
struct MapView: UIViewRepresentable {
func makeUIView(context: Context) -> MKMapView {
let map = MKMapView()
map.mapType = .standard
map.isRotateEnabled = false
let location = CLLocation(latitude: 40.763783, longitude: -73.973133)
let region = MKCoordinateRegion(center: location.coordinate, latitudinalMeters: 2000, longitudinalMeters: 2000)
map.setRegion(region, animated: true)
let annotation = MyAnnotation(coordinate: location.coordinate)
annotation.title = "Title"
annotation.subtitle = "Subtitle"
map.addAnnotation(annotation)
return map
}
func updateUIView(_ uiView: MKMapView, context: Context) {
}
}
class MyAnnotation: NSObject, MKAnnotation {
var coordinate: CLLocationCoordinate2D
var title: String?
var subtitle: String?
init(coordinate: CLLocationCoordinate2D) {
self.coordinate = coordinate
}
}
Замена изображения для Прямоугольник (тест 2 в коде) имеет то же поведение, я могу взаимодействовать с добавляемыми представлениями, но не могу передать свои касания / панорамирование элементам MapKit. Я даже пытался использовать отключенную кнопку в надежде, что ее тестирование попаданий будет более соответствовать тому, чего я пытаюсь достичь. К сожалению, нет.
Кто-нибудь знает способ взаимодействия с mapView, касаниями и панорамированием через другой вид?