Tengo un problema tanto con un MKOverlayView personalizado como con un MKPolygonView estándar recortado en ciertos niveles de zoom cuando hay varias superposiciones agregadas a un mapa.Personalizado MKOverlayView/no modificado MKPolygonView está recortado en ciertos niveles de zoom
The overlay of Algeria at two double tap zoom level.
The overlay of Algeria at three double tap zoom level. Note the clipping.
Algunas observaciones:
- Esto ocurre independientemente de si o no utilizo una costumbre MKOverlayView o devolver un MKPolygonView con los mismos polígonos.
- Si solo dibujo una superposición, este problema no ocurre.
- Esto no ocurre con todas las superposiciones, solo algunas.
En lo que respecta al código: esto agrega la superposición a un NSMutableArray (borderOverlays), que luego se accede a otra parte para cargar la superposición para un ID de país específico. minX/minY/maxX/maxY son valores de latitud/longitud; polígono es una ruta construida a partir de un archivo shape de ESRI.
CLLocationCoordinate2D mbrMin = CLLocationCoordinate2DMake(minY, minX);
CLLocationCoordinate2D mbrMax = CLLocationCoordinate2DMake(maxY, maxX);
MKMapPoint minPoint = MKMapPointForCoordinate(mbrMin);
MKMapPoint maxPoint = MKMapPointForCoordinate(mbrMax);
MKMapSize size = MKMapSizeMake(maxPoint.x - minPoint.x, maxPoint.y - minPoint.y);
MKMapRect rect = MKMapRectMake(minPoint.x, minPoint.y, size.width, size.height);
if (spans180) {
rect = MKMapRectMake(minPoint.x, minPoint.y, MKMapSizeWorld.width * 2, size.height);
}
CustomMKOverlay* overlay = [[CustomMKOverlay alloc] initWithPolygon:polygon withBoundingMapRect:rect];
[borderOverlays addObject:overlay];
La superposición se añade al mapa a través de:
[mapView addOverlay:overlay];
viewForOverlay:
- (MKOverlayView *)mapView:(MKMapView*)aMapView viewForOverlay:(id<MKOverlay>)overlay
{
if ([overlay isKindOfClass:[CustomMKOverlay class]]) {
/* Note: the behaviour if this chunk is not commented is the exact same as below.
CustomMKOverlayView* overlayView = [[[CustomMKOverlayView alloc] initWithOverlay:overlay withMapView:aMapView] autorelease];
[borderViews addObject:overlayView];
return overlayView; */
MKPolygonView* view = [[[MKPolygonView alloc] initWithPolygon:((CustomMKOverlay*)overlay).polygon] autorelease];
view.fillColor = [((CustomMKOverlay*)overlay).colour colorWithAlphaComponent:0.5f];
view.lineWidth = 5.0f;
view.strokeColor = [UIColor blackColor];
[borderViews addObject:view];
return view;
}
}
Cuando se utiliza MKPolygonView, no hay código de dibujo (el ejemplo mostrado). Sin embargo, para completar, aquí está mi código de dibujo personalizado, y ocurre el mismo problema. Los contornos normalmente dibujan: esto es, en realidad, dibujo de eliminación de fallas, que dibuja un rect alrededor del delimitadorMapRect de la superposición y lo rellena sin ensuciar con los contornos.
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
{
CustomMKOverlay* overlay = (CustomMKOverlay*)self.overlay;
CGRect clipRect = [self rectForMapRect:overlay.boundingMapRect];
CGContextAddRect(context, clipRect);
CGContextClip(context);
UIColor* colour = [UIColor redColor];
colour = [colour colorWithAlphaComponent:0.5f];
CGContextSetFillColorWithColor(context, [colour CGColor]);
CGRect fillRect = [self rectForMapRect:overlay.boundingMapRect];
CGContextFillRect(context, fillRect);
}
Basta con decir que estoy un poco perplejo en este momento - es casi como si el que está siendo cargado ampliada de baldosas atrae a más de la superposición. He publicado varios ejemplos sobre TileMap y HazardMap, pero como no estoy cargando mis propios mosaicos de mapas, no son muy útiles.
Probablemente me esté perdiendo algo dolorosamente obvio. Cualquier ayuda sería apreciada. Me complace proporcionar más código/contexto si es necesario.