Чтобы справиться с требованием «набор карт скрывает оставшуюся часть карты», вы можете создать черное многоугольное наложение, которое покрывает весь мир вырезом над Азией (или где угодно).
Например, когда вы инициализируете карту (например, в viewDidLoad):
CLLocationCoordinate2D asiaCoords[4]
= { {55,60}, {55,150}, {0,150}, {0,60} };
//change or add coordinates (and update count below) as needed
self.asiaOverlay = [MKPolygon polygonWithCoordinates:asiaCoords count:4];
CLLocationCoordinate2D worldCoords[4]
= { {90,-180}, {90,180}, {-90,180}, {-90,-180} };
MKPolygon *worldOverlay
= [MKPolygon polygonWithCoordinates:worldCoords
count:4
interiorPolygons:[NSArray arrayWithObject:asiaOverlay]];
//the array can have more than one "cutout" if needed
[myMapView addOverlay:worldOverlay];
и реализовать метод делегата viewForOverlay
:
-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
if ([overlay isKindOfClass:[MKPolygon class]])
{
MKPolygonView *pv = [[[MKPolygonView alloc] initWithPolygon:overlay] autorelease];
pv.fillColor = [UIColor blackColor];
pv.alpha = 1.0;
return pv;
}
return nil;
}
Это выглядит так:
Если вы также хотите ограничить пользователя от прокрутки за пределы Азии или слишком большого масштабирования, то вам нужно будет сделать это и вручную. Один из возможных способов описан в Ограничить прокрутку MKMapView . Замените theOverlay
в этом ответе на asiaOverlay
.