首页 > 解决方案 > 覆盖视图,但将输入向下传播到最低 z-index

问题描述

使用 SwiftUI,我想创建一个视图,用户可以在其中选择地图上的区域。为此,我想使用 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)
            )
    }
} 

结果如下: 在此处输入图像描述

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

如何将用户手势传递给 MapView,使圆圈只是一个没有任何功能的实际视觉覆盖?

标签: iosswiftxcodeswiftuixcode11

解决方案


- 禁用水龙头:

设置.allowsHitTesting(false)Circle

- 禁用平移:

在 SwiftUI 中是不可能的(还)。


推荐阅读