我正在为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
属性。
为什么我们没有看到叠加层?
答案 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