6

我正在为 iOS 7 更新 iOS 6 应用程序,发现在 iOS 7 中处理覆盖的方式已经完全改变。

我们在整个地图上绘制了一个浅灰色的叠加层。在 iOS 6 中一切正常,在 iOS 7 中我们没有覆盖。

viewDidLoad我有以下内容:

CLLocationCoordinate2D worldCoords[4] = { {90,-180}, {90,180}, {-90,180}, {-90,-180} };
MKPolygon *worldOverlay = [MKPolygon polygonWithCoordinates:worldCoords
                                                      count:4];
[self.mapView addOverlay:worldOverlay];

然后,对于 iOS 6 。. .

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
    if (![overlay isKindOfClass:[MKPolygon class]]) {
        return nil;
    }
    MKPolygon *polygon = (MKPolygon *)overlay;
    MKPolygonView *view = [[MKPolygonView alloc] initWithPolygon:polygon];
    view.fillColor = [[UIColor darkGrayColor] colorWithAlphaComponent:0.4];
    return view;
}

对于 iOS 7 。. .

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
    if (![overlay isKindOfClass:[MKPolygon class]]) {
        return nil;
    }
    MKPolygon *polygon = (MKPolygon *)overlay;
    MKPolygonRenderer *renderer = [[MKPolygonRenderer alloc] initWithPolygon:polygon];
    renderer.fillColor = [[UIColor darkGrayColor] colorWithAlphaComponent:0.4];    
    return renderer;
}

使用断点,我验证了该mapView:rendererForOverlay:方法正在被调用,并且renderer它返回的对象具有fillColor正确设置的属性。

关于为什么我们没有看到覆盖的任何想法?

4

2 回答 2

5

你所有的代码都是绝对有效的——我把它插入我的测试地图控制器,如果我做一点小改动,它就可以完美地工作:

    CLLocationCoordinate2D worldCoords[4] = { {43,-100}, {43,-80}, {25,-80}, {25,-100} };

因此,问题不在于渲染器本身。我相信这与指定第 180 条子午线有关 - Apple 已做出一些更改以支持 iOS7 中跨越 180 条子午线的区域。我不需要它,因为只专注于北美,所以我跳过了它,但有一个 2013 年 WWDC 视频,他们在其中谈论它 - 请参阅 4:42 左右 MapKit 会话中的新增功能:https ://developer.apple.com/ wwdc/视频/

干杯,

于 2013-09-19T19:43:28.787 回答
1

我试了无数次,终于找到了一张覆盖了整个一路的世界地图。苹果不知道怎么搞sdk,必须加两个多边形,世界地图就会分成两部分。并添加到叠加层。这两部分的边界定义是:

 var ccoodsW = new CLLocationCoordinate2D[] {
                 new CLLocationCoordinate2D(){ Latitude = 85.9809906974076,Longitude = -179.999999644933 },
                 new CLLocationCoordinate2D(){ Latitude = -80.9793991796858,Longitude = -179.999999644933},
                 new CLLocationCoordinate2D(){ Latitude = -80.97939920061767,Longitude = 0},
                 new CLLocationCoordinate2D(){ Latitude = 85.9809906974076 ,Longitude = 0}
             };

        var ccoodsE = new CLLocationCoordinate2D[] {
                 new CLLocationCoordinate2D(){ Latitude = 85.9809906974076,Longitude = 0 },
                 new CLLocationCoordinate2D(){ Latitude = -80.9793991796858,Longitude = 0},
                 new CLLocationCoordinate2D(){ Latitude = -80.97939920061767,Longitude = 179.999999644933},
                 new CLLocationCoordinate2D(){ Latitude = 85.9809906974076 ,Longitude = 179.999999644933}
             };

顺便说一句:我正在为 ios 使用 xamarin

于 2014-01-07T11:36:27.173 回答