我想使用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)
)
}
}
结果如下:
现在,问题是,如果我在红色圆圈内,则在 map 上滚动将不再起作用,因为输入指向圆圈,但没有传播到实际 map 。仍然可以将 map 滚动到圆圈之外。
如何将用户的手势向下传递到MapView,以使圆圈只是一个实际的视觉叠加而没有任何功能?
最佳答案
-禁用点击:
在.allowsHitTesting(false)
上设置Circle
-禁用平移:
在SwiftUI中尚不可能(尚未)。
关于ios - 叠加 View ,但将输入传播到最低Z索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58174984/