Authored by Tracy Harton

- touchesEnded: mimic Google Maps two-finger tap to zoom out behavior (to go wit…

…h 1 finger double-tap to zoom in behavior)
- moveToProjectedPoint: setNeedsDisplay for overlay on map move to redraw RMPath
... ... @@ -191,6 +191,7 @@ enum {
- (float)adjustZoomForBoundingMask:(float)zoomFactor;
- (void)adjustMapPlacementWithScale:(float)aScale;
- (float)nextNativeZoomFactor;
- (float)prevNativeZoomFactor;
- (void) drawRect: (CGRect) rect;
... ...
... ... @@ -328,6 +328,7 @@
[overlay correctPositionOfAllSublayers];
[tileLoader reload];
[renderer setNeedsDisplay];
[overlay setNeedsDisplay];
}
- (void)moveBy: (CGSize) delta
... ... @@ -550,6 +551,12 @@
return exp2f(newZoom - [self zoom]);
}
- (float)prevNativeZoomFactor
{
float newZoom = fmax(floorf([self zoom] - 1.0), [self minZoom]);
return exp2f(newZoom - [self zoom]);
}
/// \deprecated appears to be unused
- (void)zoomInToNextNativeZoomAt:(CGPoint) pivot animated:(BOOL) animated
{
... ...
... ... @@ -179,8 +179,8 @@
_delegateHasAfterMapTouch = [(NSObject*) delegate respondsToSelector: @selector(afterMapTouch:)];
_delegateHasShouldDragMarker = [(NSObject*) delegate respondsToSelector: @selector(mapView: shouldDragMarker: withEvent:)];
_delegateHasDidDragMarker = [(NSObject*) delegate respondsToSelector: @selector(mapView: didDragMarker: withEvent:)];
_delegateHasShouldDragMarker = [(NSObject*) delegate respondsToSelector: @selector(mapView: shouldDragMarker: withEvent:)];
_delegateHasDidDragMarker = [(NSObject*) delegate respondsToSelector: @selector(mapView: didDragMarker: withEvent:)];
_delegateHasDragMarkerPosition = [(NSObject*) delegate respondsToSelector: @selector(dragMarkerPosition: onMap: position:)];
}
... ... @@ -412,35 +412,41 @@
}
}
if (touch.tapCount == 1)
{
CALayer* hit = [self.contents.overlay hitTest:[touch locationInView:self]];
// RMLog(@"LAYER of type %@",[hit description]);
if (hit != nil) {
CALayer *superlayer = [hit superlayer];
if(lastGesture.numTouches == 0)
{
CALayer* hit = [self.contents.overlay hitTest:[touch locationInView:self]];
// RMLog(@"LAYER of type %@",[hit description]);
// See if tap was on a marker or marker label and send delegate protocol method
if ([hit isKindOfClass: [RMMarker class]]) {
if (_delegateHasTapOnMarker) {
[delegate tapOnMarker:(RMMarker*)hit onMap:self];
if (hit != nil) {
CALayer *superlayer = [hit superlayer];
// See if tap was on a marker or marker label and send delegate protocol method
if ([hit isKindOfClass: [RMMarker class]]) {
if (_delegateHasTapOnMarker) {
[delegate tapOnMarker:(RMMarker*)hit onMap:self];
}
} else if (superlayer != nil && [superlayer isKindOfClass: [RMMarker class]]) {
if (_delegateHasTapOnLabelForMarker) {
[delegate tapOnLabelForMarker:(RMMarker*)superlayer onMap:self];
}
}
} else if (superlayer != nil && [superlayer isKindOfClass: [RMMarker class]]) {
if (_delegateHasTapOnLabelForMarker) {
[delegate tapOnLabelForMarker:(RMMarker*)superlayer onMap:self];
else if (_delegateHasSingleTapOnMap) {
[delegate singleTapOnMap: self At: [touch locationInView:self]];
}
}
else if (_delegateHasSingleTapOnMap) {
[delegate singleTapOnMap: self At: [touch locationInView:self]];
}
}
else if(lastGesture.numTouches == 1)
{
float prevZoomFactor = [self.contents prevNativeZoomFactor];
if (prevZoomFactor != 0)
[self zoomByFactor:prevZoomFactor near:[touch locationInView:self] animated:YES];
}
}
if (_delegateHasAfterMapTouch) [delegate afterMapTouch: self];
// [self.contents recalculateImageSet];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
... ...