diff options
-rw-r--r-- | ios/app/MBXViewController.mm | 3 | ||||
-rw-r--r-- | platform/ios/MGLMapView.mm | 36 |
2 files changed, 33 insertions, 6 deletions
diff --git a/ios/app/MBXViewController.mm b/ios/app/MBXViewController.mm index 0e0e73c4db..98b337f927 100644 --- a/ios/app/MBXViewController.mm +++ b/ios/app/MBXViewController.mm @@ -12,7 +12,8 @@ static NSArray *const kStyleNames = @[ @"Bright", @"Basic", @"Outdoors", - @"Satellite" + @"Satellite", + @"Hybrid", ]; static NSString *const kStyleVersion = @"v7"; diff --git a/platform/ios/MGLMapView.mm b/platform/ios/MGLMapView.mm index 45c96e7c3b..141d6cae1d 100644 --- a/platform/ios/MGLMapView.mm +++ b/platform/ios/MGLMapView.mm @@ -92,7 +92,9 @@ NSTimeInterval const MGLAnimationDuration = 0.3; @end -@implementation MGLMapView +@implementation MGLMapView { + NSMutableArray *_bundledStyleNames; +} #pragma mark - Setup & Teardown - @@ -938,16 +940,40 @@ mbgl::DefaultFileSource *mbglFileSource = nullptr; - (NSArray *)bundledStyleNames { - NSString *stylesPath = [[MGLMapView resourceBundlePath] stringByAppendingString:@"/styles"]; - - NSArray *styleNames = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:stylesPath error:nil]; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + if (!_bundledStyleNames) { + NSString *stylesPath = [[MGLMapView resourceBundlePath] stringByAppendingString:@"/styles"]; + + _bundledStyleNames = [[[NSFileManager defaultManager] contentsOfDirectoryAtPath:stylesPath error:nil] mutableCopy]; + + // Add hybrids + NSString *hybridStylePrefix = @"hybrid-"; + NSString *satelliteStylePrefix = @"satellite-"; + NSMutableArray *hybridStyleNames = [NSMutableArray array]; + for (NSString *styleName in _bundledStyleNames) { + if ([styleName hasPrefix:satelliteStylePrefix]) { + [hybridStyleNames addObject:[hybridStylePrefix stringByAppendingString:[styleName substringFromIndex:[satelliteStylePrefix length]]]]; + } + } + [_bundledStyleNames addObjectsFromArray:hybridStyleNames]; + } + }); - return styleNames; + return _bundledStyleNames; } - (void)useBundledStyleNamed:(NSString *)styleName { + NSString *hybridStylePrefix = @"hybrid-"; + BOOL isHybrid = [styleName hasPrefix:hybridStylePrefix]; + if (isHybrid) { + styleName = [@"satellite-" stringByAppendingString:[styleName substringFromIndex:[hybridStylePrefix length]]]; + } [self setStyleURL:[NSString stringWithFormat:@"styles/%@.json", styleName]]; + if (isHybrid) { + [self setAppliedStyleClasses:@[@"contours", @"labels"]]; + } } - (NSArray *)getStyleOrderedLayerNames |