#if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." #endif #import "GoogleMapsDemos/Samples/TileLayerViewController.h" #import @implementation TileLayerViewController { UISegmentedControl *_switcher; GMSMapView *_mapView; GMSTileLayer *_tileLayer; NSInteger _floor; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:37.78318 longitude:-122.403874 zoom:18]; _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; _mapView.buildingsEnabled = NO; _mapView.indoorEnabled = NO; self.view = _mapView; // The possible floors that might be shown. NSArray *types = @[ @"1", @"2", @"3" ]; // Create a UISegmentedControl that is the navigationItem's titleView. _switcher = [[UISegmentedControl alloc] initWithItems:types]; _switcher.selectedSegmentIndex = 0; _switcher.autoresizingMask = UIViewAutoresizingFlexibleWidth; _switcher.frame = CGRectMake(0, 0, 300, _switcher.frame.size.height); self.navigationItem.titleView = _switcher; // Listen to touch events on the UISegmentedControl, force initial update. [_switcher addTarget:self action:@selector(didChangeSwitcher) forControlEvents:UIControlEventValueChanged]; [self didChangeSwitcher]; } - (void)didChangeSwitcher { NSString *title = [_switcher titleForSegmentAtIndex:_switcher.selectedSegmentIndex]; NSInteger floor = [title integerValue]; if (_floor != floor) { // Clear existing tileLayer, if any. _tileLayer.map = nil; // Create a new GMSTileLayer with the new floor choice. GMSTileURLConstructor urls = ^(NSUInteger x, NSUInteger y, NSUInteger zoom) { NSString *url = [NSString stringWithFormat:@"https://www.gstatic.com/io2010maps/tiles/9/L%zd_%tu_%tu_%tu.png", floor, zoom, x, y]; return [NSURL URLWithString:url]; }; _tileLayer = [GMSURLTileLayer tileLayerWithURLConstructor:urls]; _tileLayer.map = _mapView; _floor = floor; } } @end