釣魚術
swift
swiftui
今天重點有兩個:
(1) 移動地圖畫面擷取中心座標的方式,會較使用 GeometryReader 抓取螢幕位置並換算地圖實際座標來得容易。所以我打算在螢幕中間放上一個十字,並且透過觸發事件的方式,拿座標。
(2) 關於跳出選單的行為,官方文件有給建議,除非必要,不然不要這麼做,原因下面討論。
MapView
的局部程式碼 VStack(alignment: .trailing) {
HStack {
Spacer()
LocationButton(.currentLocation) {
viewModel.requestAllowOnceLocationPermission()
}
.foregroundColor(.white)
.cornerRadius(15)
.labelStyle(.iconOnly)
.symbolVariant(.fill)
.padding(10)
}
Spacer()
}
VStack(alignment: .center) {
Image(systemName: "plus")
.foregroundColor(.black)
}
ZStack(alignment: .center) { }
這邊設定了 Z-象限 畫面堆疊 的對齊方式,預設是擺中間的。.onLongPressGesture { }
偵測長按Map(coordinateRegion: $viewModel.region,
showsUserLocation: true,
annotationItems: SecretLocations) { item in
MapAnnotation(coordinate: item.coordinate) {
Text(item.name)
.fontWeight(.light)
.font(.caption2)
switch item.rank {
case 1:
Image(systemName: "hand.thumbsdown.circle.fill")
.foregroundColor(.red)
.background(Color.white)
.clipShape(Circle())
case 2:
Image(systemName: "tortoise.fill")
.foregroundColor(.orange)
case 3:
Image(systemName: "questionmark.circle.fill")
.foregroundColor(.gray)
.background(Color.white)
.clipShape(Circle())
case 4:
Image(systemName: "face.smiling.fill")
.foregroundColor(.cyan)
.background(Color.white)
.clipShape(Circle())
case 5:
Image(systemName: "hand.thumbsup.circle.fill")
.foregroundColor(.green)
.background(Color.white)
.clipShape(Circle())
default:
Image(systemName: "questionmark.circle.fill")
.foregroundColor(.gray)
.background(Color.white)
.clipShape(Circle())
} // switch end
} // ManAnnotation end
} // annotationItems
.onLongPressGesture {
isLongPressed.toggle()
customLocation = ScreenLocation(
latitude: viewModel.region.center.latitude,
longitude: viewModel.region.center.longitude)
print(customLocation) // Debug 使用
}
actionSheet
與 ActionSheet
時,看了 Getting the user’s attention with alerts and action sheets