如何在MKMapView上显示/隐藏夜间模式叠加时间

时间:2018-03-17 08:06:28

标签: ios swift mapkit mkmapview mkannotation

我想在MKMapView上添加夜间模式叠加/标记等...如果特定的一天时间是在夜间之间。挑战是在当前时间在夜间之间的特定位置添加叠加或标记。

enter image description here

您可以看到附加的图像。它显示了美国的不同状态和底部的日期滑块小部件。当我滑入时,日期和时间会发生变化。我必须在地图上的滑块中显示选定时间的日夜不同状态......

当滑块滑动到夜晚时,地图应显示从时间在夜间之间的位置/状态的任何(右/左)方向的动画夜间叠加。

尝试过方法

首先

我可以在完整地图上添加叠加层以显示为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上生效。

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

1 个答案:

答案 0 :(得分:0)

为此,您可以使用 Google时区API

你只需要从API中获取lat,lng到API.Response

  

{

     

“dstOffset”:3600,       “rawOffset”: - 18000,       “状态”:“好”,       “timeZoneId”:“America / New_York”,       “timeZoneName”:"Eastern Daylight Time"

     

}

使用“timeZoneName”值关闭夜间模式