![](/img/trans.png)
[英]How to make SwiftUI view transparent or semi-transparent inside an UIView?
[英]Semi-transparent circle on top of map in SwiftUI
我正在 SwiftUI 中構建一個應用程序,我真的遇到了一點不便。 我正在使用 MapKit 創建一個 map,其中某些位置在它們上面有一個引腳。 我創建了一個 slider 來縮放到一定半徑內的區域。 然而,對於用戶來說,看到一個半透明的圓圈會很方便,它表示在他們給定的半徑內有什么。 我已經嘗試了以下
Circle()
.fill(Color.blue)
.frame(width: geo.size.width, height: geo.size.height)
.opacity(0.15)
.allowsHitTesting(false)
,但是在我添加了.allowsHitTesting(false) 之后,我仍然無法點擊引腳。 當我擺脫圓圈時,它再次起作用。 也許我遺漏了一些東西,或者這個問題有另一個解決方法。
這是我的全文以獲得額外的上下文:
GeometryReader{ geo in
ZStack{
Map(coordinateRegion: $region, interactionModes: [], showsUserLocation: true, annotationItems: GPsNear, annotationContent: { pin in
MapAnnotation(coordinate: pin.coordinate,
content: {
PinButtonView(pin: pin)
})
})
.edgesIgnoringSafeArea(.all)
.onAppear(perform: askForPermission)
// Circle()
// .fill(Color.blue)
// .frame(width: geo.size.width, height: geo.size.height)
// .opacity(0.15)
// .allowsHitTesting(false)
VStack{
Slider(
value: Binding(get: {
self.regionSpan * 100
}, set: { (newVal) in
self.regionSpan = (newVal / 100)
self.sliderChanged()
}),
in: 0.9...45.045,
step: 1,
onEditingChanged: { editing in
isEditing = editing
},
minimumValueLabel: Text("1"),
maximumValueLabel: Text("25 km")
) {
Text("Radius")
}.padding()
Spacer()
}
}
}
還有 PinButtonView:
Button(action: {
showingDetailScreen.toggle()
}) {
Image(systemName: "mappin")
.padding()
.foregroundColor(.red)
.font(.title)
}
.actionSheet(isPresented: $showingDetailScreen){
ActionSheet(title: Text(pin.name), buttons: [
.default(Text("Call practitioner")) {
callNumber()
},
.default(Text("Visit website")) { visitSite() },
.cancel()
])
}
有沒有人對此有解決方案,我期待看到任何答案。
您需要使用.overlay 和.allowsHitTesting(false)。
ZStack{
Map(coordinateRegion: $region, interactionModes: [], showsUserLocation: true, annotationItems: GPsNear, annotationContent: { pin in
MapAnnotation(coordinate: pin.coordinate,
content: {
PinButtonView(pin: pin)
})
})
.edgesIgnoringSafeArea(.all)
.onAppear(perform: askForPermission)
.overlay(
Circle()
.fill(Color.blue)
.frame(width: geo.size.width, height: geo.size.height)
.opacity(0.15)
)
.allowsHitTesting(false)
VStack{
//// Rest of the code
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.