我想使用SwiftUI创建一个视图,用户可以在其中选择 map 上的区域。为此,我想使用MapKit并在其上方绘制一个稍微不透明的红色圆圈,该圆圈指示当前区域。根据缩放级别,区域会变大或变小。

我已经有以下代码(MapView摘自该备忘单https://github.com/SimpleBoilerplates/SwiftUI-Cheat-Sheet#navigation):

import MapKit

struct MapView: UIViewRepresentable {
    func makeUIView(context: Context) -> MKMapView {
        MKMapView(frame: .zero)
    }

    func updateUIView(_ view: MKMapView, context: Context) {
        let coordinate = CLLocationCoordinate2D(
            latitude: 34.011286,
            longitude: -116.166868
        )
        let span = MKCoordinateSpan(latitudeDelta: 2.0, longitudeDelta: 2.0)
        let region = MKCoordinateRegion(center: coordinate, span: span)
        view.setRegion(region, animated: true)
    }
}

struct LocationSelectionView: View {
    var body: some View {
        MapView()
            .overlay(
                Circle()
                    .fill(Color.init(red: 1.0, green: 0.0, blue: 0.0, opacity: 0.3))
                    .frame(width: 300, height: 300)
            )
    }
}

结果如下:
ios - 叠加 View ,但将输入传播到最低Z索引-LMLPHP

现在,问题是,如果我在红色圆圈内,则在 map 上滚动将不再起作用,因为输入指向圆圈,但没有传播到实际 map 。仍然可以将 map 滚动到圆圈之外。

如何将用户的手势向下传递到MapView,以使圆圈只是一个实际的视觉叠加而没有任何功能?

最佳答案

-禁用点击:

.allowsHitTesting(false)上设置Circle
-禁用平移:

在SwiftUI中尚不可能(尚未)。

关于ios - 叠加 View ,但将输入传播到最低Z索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58174984/

10-10 20:53