Вы можете сделать это без проблем.Как вы уже описали, просто поместите MKMapView в ваше окно, а второй сверху.Давайте предположим, что мы называем их _map1 и _map2, причем последний находится поверх _map1.Протокол MKMapViewDelegate сообщит вам, когда пользователь прокручивает / перемещает / изменяет масштаб _map2, поэтому вы можете указать _map1 отображать ту же видимую область _map2.
В моем примере я использую ползунок, чтобы установить уровень прозрачности _map2.
#import "ViewController.h"
@import MapKit;
@interface ViewController () <MKMapViewDelegate>
@property (weak, nonatomic) IBOutlet MKMapView *map1;
@property (weak, nonatomic) IBOutlet MKMapView *map2;
@property (weak, nonatomic) IBOutlet UISlider *alphaSlider;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[_map1 setMapType:MKMapTypeSatellite];
[_map2 setMapType:MKMapTypeStandard];
[_map2 setAlpha:0.5];
[_map2 setDelegate:self];
[_alphaSlider addTarget:self action:@selector(sliderChanged) forControlEvents:UIControlEventAllEvents] ;
_alphaSlider.value = _map2.alpha;
}
- (void)mapViewDidChangeVisibleRegion:(MKMapView *)mapView
{
// _map2 is on top and will receive visible region updates, i.e. the user scrolled/moved/zoomed the map
// just pass the new region to _map1 so it will be similar to that one of _map2
[_map1 setRegion:_map2.region];
}
- (void)sliderChanged
{
[_map2 setAlpha:_alphaSlider.value];
}