我可能已经花费了大约6个小时来研究和尝试&错误解决此问题,并且处于束缚中-帮助!

我在世界各地创建了一组简单的纵向折线,并且在视图线以180度E / W可见时发现了奇怪的行为。如果完全缩小,则所有折线均会正确显示,但是一旦我开始放大,则后视线以东的线开始消失。如果我缩小,线条会重新出现。或者,如果平移地图,使子午线/日期线恰好位于视图的左边缘,则所有线也会重新出现(与缩放级别无关)!我在下面显示4个屏幕截图:

  • (未显示)跨度约为108度及以上(所有折线可见)
  • 跨度为101度(日期线以东的我的折线开始消失)
  • 跨度为92度(更多行消失了)
  • 跨度为81度(日期线以东的所有折线都消失了)
  • 跨度为82,日期线刚好位于视图的左边缘(重新出现所有折线)//忽略在此屏幕截图中线条看起来更细-我一直在玩线粗
    ios - Xcode 6中的Mapkit在放大时(使用Swift)仅显示日期线以西的叠加层-LMLPHP

  • 我的代码如下。在每次区域更新时都会调用drawgrid()函数。这在iOS 8 + iPhone 6模拟器和真实设备(运行iOS 7.1的iPhone 4)中都是一样的
    func drawgrid() {
        var b: [CLLocationCoordinate2D] = []
        for var x = -179.99; x <= 179.99; x = x + 1.0 { // I tried -180.0 to 180.0 as well -> no effect
            let c1 = CLLocationCoordinate2D(latitude: 90.0, longitude: x) // Tried 80.0 as well
            let c2 = CLLocationCoordinate2D(latitude: -90.0, longitude: x) // Tried -80.0 as well
            b = [c1, c2]
            var polyline = MKPolyline(coordinates: &b, count: b.count)
            mapView.addOverlay(polyline)
        }
    }
    
    func mapView(mapView: MKMapView!,regionDidChangeAnimated animated: Bool) {
        mapView.removeOverlays(mapView.overlays) // Already tried commenting this out (it's for a different purpose elsewhere in the app)
        drawgrid()
        MyLabel.text = "Span = \(mapView.region.span.longitudeDelta) deg"
        MyLabel2.text = "Center = \(mapView.region.center.longitude) \(mapView.region.center.latitude)"
    }
    
    func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
        if overlay is MKPolyline{
            var polylineRenderer = MKPolylineRenderer(overlay: overlay)
            polylineRenderer.strokeColor = UIColor.redColor()
            polylineRenderer.lineWidth = 0.1 // tried thicker value of 1.0 too
            return polylineRenderer
        }
        return nil
    }
    

    任何帮助都将不胜感激!我有点菜鸟(几周前才开始编写代码),所以如果您可以使用Swift而不是Objective-C来提供指导,那也可以避免我将头撞到桌子上。谢谢!

    编辑11/22/2014:仍然存在此问题,似乎它不仅影响覆盖,而且影响注释。只要国际日期线在视图中,我的所有注释都会消失,无论它们在地图上的位置如何。.仍然无法找到解决方法,它的确散发出臭虫的味道。

    最佳答案

    添加以下println()。

        func mapView(mapView: MKMapView!,regionDidChangeAnimated animated: Bool) {
        println("region did change*****************************") // Added
        mapView.removeOverlays(mapView.overlays) // Already tried commenting this out (it's for a different purpose elsewhere in the app)
        drawgrid()
        MyLabel.text = "Span = \(mapView.region.span.longitudeDelta) deg"
        MyLabel2.text = "Center = \(mapView.region.center.longitude) \(mapView.region.center.latitude)"
    }
    


        func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
    
    
    
    
    
        if overlay is MKPolyline{
            var polylineRenderer = MKPolylineRenderer(overlay: overlay)
            polylineRenderer.strokeColor = UIColor.redColor()
            polylineRenderer.lineWidth = 1 // tried thicker value of 1.0 too
            println("Lonitude " + "\(overlay.coordinate.longitude)") //Added
            return polylineRenderer
        }
        return nil
    }
    

    然后运行您的应用程序并查看控制台框,您会看到您的值看起来像正常值,直到到达问题区域,然后负经度在某个点被切断。

    查找renderForOverlay函数的引用。 https://developer.apple.com/library/prerelease/iOS/documentation/MapKit/Reference/MKMapView_Class/index.html#//apple_ref/occ/instm/MKMapView/addOverlays:表示边界的折线将与将要渲染的地图的视图部分相交(我认为那些不折线将不会被渲染)。我相信这可能是您的问题。

    10-08 02:43