ios - 覆盖视图,但将输入向下传播到最低 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,使圆圈只是一个没有任何功能的实际视觉覆盖?
解决方案
- 禁用水龙头:
设置.allowsHitTesting(false)
在Circle
- 禁用平移:
在 SwiftUI 中是不可能的(还)。
推荐阅读
- c# - 带有服务堆栈的 Windows 服务返回“错误请求”错误
- r - 将R对象插入json字符串
- django - 将模型导入 functions.py 是一种方法,但不是更好的方法
- python-2.7 - 在python中使用if else重命名列名的麻烦
- ios - 我对 AVPlayer 的本地路径视频有一个字符串错误
- flutter - Flutter:在模拟器上运行而不是在真实设备上运行
- javascript - 仅使用 javascript 在页面滚动 25% 时获取警报
- string - Lua——子字符串
- android - 清单文件中的android未解决的类.MainActivity错误
- r - 如何保留另一个列表中存在的数据框的变量?