我想在MKMapView上添加夜间模式叠加/标记等...如果特定的一天时间是在夜间之间。挑战是在当前时间在夜间之间的特定位置添加叠加或标记。
您可以看到附加的图像。它显示了美国的不同状态和底部的日期滑块小部件。当我滑入时,日期和时间会发生变化。我必须在地图上的滑块中显示选定时间的日夜不同状态......
当滑块滑动到夜晚时,地图应显示从时间在夜间之间的位置/状态的任何(右/左)方向的动画夜间叠加。
尝试过方法
首先
我可以在完整地图上添加叠加层以显示为nightMode,这就是我尝试的方式。 当滑块时间在19:00到07:00之间时,我在地图上添加了一个黑色叠加层。
func addNightModeOverLay() {
if (self.nightMode == nil){
let mapRadius = CLLocationDistance(exactly: MKMapRectWorld.size.height)!
self.nightMode = MKCircle(center: mapView.centerCoordinate, radius: mapRadius)
self.mapView.add(nightMode!)
}
}
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
if overlay.isKind(of: MKCircle.self) {
let view = MKCircleRenderer(overlay: overlay)
view.fillColor = UIColor.black.withAlphaComponent(0.2)
return view
}
return MKOverlayRenderer(overlay: overlay)
}
当滑块时间在07:00到18:00之间时,我将从地图中移除黑色叠加层。
func removeNightModeOverLay() {
if let nightMode = self.nightMode {
self.mapView.remove(nightMode)
self.nightMode = nil
}
}
地图视图上暗层叠加的简单开/关效果。
第二
我还可以将带有自定义图片的标记添加到全屏,并使用UIView.animate with duration
从源Lat
Lng
到目标Lat
Lng
来设置动画,但不能处理动画方向和速度。
问题
1:仅在有选定时间夜晚的地点添加夜间模式
2:当夜晚和白天之间的时间变化时,夜间叠加应该会在mapView上生效。
我不确定如何获得这个结果,或者即使有一个很好的方法来实现它。任何有关这方面的帮助将不胜感激。
答案 0 :(得分:0)
为此,您可以使用 Google时区API
你只需要从API中获取lat,lng到API.Response
{
“dstOffset”:3600, “rawOffset”: - 18000, “状态”:“好”, “timeZoneId”:“America / New_York”, “timeZoneName”:
"Eastern Daylight Time"
}
使用“timeZoneName”值关闭夜间模式