Sto riscontrando un problema sia con un MKOverlayView personalizzato che con MKPolygonView standard che viene ritagliato a determinati livelli di zoom quando sono presenti più sovrapposizioni aggiunte a una mappa.Personalizzato MKOverlayView/non modificato MKPolygonView è ritagliato a determinati livelli di zoom
The overlay of Algeria at two double tap zoom level.
The overlay of Algeria at three double tap zoom level. Note the clipping.
Alcune osservazioni:
- Questo si verifica indipendentemente dal fatto che io uso una consuetudine MKOverlayView o restituire un MKPolygonView con gli stessi poligoni.
- Se disegno solo una sovrapposizione, questo problema non si verifica.
- Questo non si verifica per tutti gli overlay, solo alcuni.
Per quanto riguarda il codice va: questo aggiunge la sovrapposizione a un NSMutableArray (borderOverlays), che viene poi letta altrove per caricare la sovrapposizione per uno specifico ID paese. minX/minY/maxX/maxY sono valori di latitudine/longitudine; poligono è un percorso costruito da uno shapefile 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 sovrapposizione viene aggiunto alla mappa attraverso:
[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;
}
}
Quando si utilizza MKPolygonView, non v'è alcun codice di disegno (nell'esempio illustrato). Per motivi di completezza, tuttavia, ecco il mio codice di disegno personalizzato e si verifica lo stesso problema. I contorni normalmente disegnano - questo è in realtà il debug del disegno, che disegna un rettangolo attorno al limite di mappatura della sovrapposizione e lo riempie senza aggirarlo con i contorni.
- (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);
}
Basti dire, io sono un po 'perplesso, a questo punto - è quasi come se la zoomata in maiolica che viene caricato disegna sopra la sovrapposizione. Ho analizzato vari esempi riguardanti TileMap e HazardMap, ma poiché non sto caricando le mie tessere della mappa, non sono molto utili.
Probabilmente mi manca qualcosa di dolorosamente ovvio. Qualsiasi aiuto sarebbe apprezzato. Sono felice di fornire più codice/contesto se necessario.