iOS 7 MKOverlayRenderer不工作

时间:2013-09-19 16:48:27

标签: iphone ios objective-c

我正在为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属性。

为什么我们没有看到叠加层?

2 个答案:

答案 0 :(得分:5)

你的所有代码都是绝对有效的 - 我将它插入我的测试地图控制器中,如果我做了一个小改动,它就能完美运行:

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

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

干杯,

答案 1 :(得分: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}
             };

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