Authored by Thomas Rasch

o New option: adjustTilesForRetinaDisplay

Doubles the tile size so that the map looks the same on retina and non-retina displays
... ... @@ -44,8 +44,8 @@
self.opaque = NO;
CATiledLayer *tiledLayer = [self tiledLayer];
tiledLayer.levelsOfDetailBias = [[mapView tileSource] maxZoom];
tiledLayer.levelsOfDetail = [[mapView tileSource] maxZoom];
tiledLayer.levelsOfDetailBias = [[mapView tileSource] maxZoom]+1;
UITapGestureRecognizer *doubleTapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)] autorelease];
doubleTapRecognizer.numberOfTapsRequired = 2;
... ...
... ... @@ -77,6 +77,7 @@ typedef enum {
RMMapOverlayView *overlayView;
double metersPerPixel;
BOOL adjustTilesForRetinaDisplay;
NSMutableArray *annotations;
NSMutableSet *visibleAnnotations;
... ... @@ -141,6 +142,8 @@ typedef enum {
@property (nonatomic, readonly) float screenScale;
@property (nonatomic, assign) NSUInteger boundingMask;
@property (nonatomic, assign) BOOL adjustTilesForRetinaDisplay;
@property (nonatomic, assign) float zoom; /// zoom level is clamped to range (minZoom, maxZoom)
@property (nonatomic, assign) float minZoom;
@property (nonatomic, assign) float maxZoom;
... ...
... ... @@ -82,6 +82,7 @@
@synthesize tileCache;
@synthesize quadTree;
@synthesize enableClustering, positionClusterMarkersAtTheGravityCenter, clusterMarkerSize;
@synthesize adjustTilesForRetinaDisplay;
#pragma mark -
#pragma mark Initialization
... ... @@ -111,6 +112,7 @@
}
boundingMask = RMMapMinWidthBound;
adjustTilesForRetinaDisplay = YES;
annotations = [NSMutableArray new];
visibleAnnotations = [NSMutableSet new];
... ... @@ -894,7 +896,11 @@
tiledLayerView = [[RMMapTiledLayerView alloc] initWithFrame:CGRectMake(0.0, 0.0, contentSize.width, contentSize.height) mapView:self];
tiledLayerView.delegate = self;
((CATiledLayer *)tiledLayerView.layer).tileSize = CGSizeMake(tileSideLength, tileSideLength);
if (self.adjustTilesForRetinaDisplay && screenScale > 1.0) {
RMLog(@"adjustTiles");
((CATiledLayer *)tiledLayerView.layer).tileSize = CGSizeMake(tileSideLength * 2.0, tileSideLength * 2.0);
} else
((CATiledLayer *)tiledLayerView.layer).tileSize = CGSizeMake(tileSideLength, tileSideLength);
[mapScrollView addSubview:tiledLayerView];
[mapScrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:NULL];
... ... @@ -1244,6 +1250,14 @@
mapScrollView.scrollEnabled = enableDragging;
}
- (void)setAdjustTilesForRetinaDisplay:(BOOL)doAdjustTilesForRetinaDisplay
{
if (adjustTilesForRetinaDisplay == doAdjustTilesForRetinaDisplay) return;
adjustTilesForRetinaDisplay = doAdjustTilesForRetinaDisplay;
[self createMapView];
}
- (RMProjection *)projection
{
return [[projection retain] autorelease];
... ...