【问题标题】:How to show/hide night mode overlay on MKMapView with respect to time如何根据时间在 MKMapView 上显示/隐藏夜间模式叠加
【发布时间】:2018-03-19 19:28:06
【问题描述】:

如果特定的白天时间在夜间之间,我正在尝试在 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 上以动画形式出现。

我不确定如何获得这个结果,或者即使有一个很好的方法来实现它。对此的任何帮助将不胜感激。

【问题讨论】:

  • 您能告诉我您要添加哪个深色叠加层吗?

标签: ios swift mapkit mkmapview mkannotation


【解决方案1】:

为此,您可以使用 Google Time Zone API

您只需将 lat、lng 提供给 API。来自 API 的响应是

{

“dstOffset”:3600, “原始偏移”:-18000, “状态”:“确定”, "timeZoneId" : "美国/纽约", “时区名称”:"Eastern Daylight Time"

}

使用“timeZoneName”值来关闭和开启夜间模式

【讨论】:

  • 它如何描述所选/特定位置的夜间时间?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多