|
@@ -162,6 +162,8 @@ |
|
@@ -162,6 +162,8 @@ |
162
|
|
162
|
|
163
|
UIViewController *viewControllerPresentingAttribution;
|
163
|
UIViewController *viewControllerPresentingAttribution;
|
164
|
UIButton *attributionButton;
|
164
|
UIButton *attributionButton;
|
|
|
165
|
+
|
|
|
166
|
+ BOOL _userAlteringPanOrZoom;
|
165
|
}
|
167
|
}
|
166
|
|
168
|
|
167
|
@synthesize decelerationMode = _decelerationMode;
|
169
|
@synthesize decelerationMode = _decelerationMode;
|
|
@@ -400,13 +402,13 @@ |
|
@@ -400,13 +402,13 @@ |
400
|
|
402
|
|
401
|
_delegate = aDelegate;
|
403
|
_delegate = aDelegate;
|
402
|
|
404
|
|
403
|
- _delegateHasBeforeMapMove = [_delegate respondsToSelector:@selector(beforeMapMove:)];
|
|
|
404
|
- _delegateHasAfterMapMove = [_delegate respondsToSelector:@selector(afterMapMove:)];
|
405
|
+ _delegateHasBeforeMapMove = [_delegate respondsToSelector:@selector(beforeMapMove:byUser:)];
|
|
|
406
|
+ _delegateHasAfterMapMove = [_delegate respondsToSelector:@selector(afterMapMove:byUser:)];
|
405
|
|
407
|
|
406
|
- _delegateHasBeforeMapZoom = [_delegate respondsToSelector:@selector(beforeMapZoom:)];
|
|
|
407
|
- _delegateHasAfterMapZoom = [_delegate respondsToSelector:@selector(afterMapZoom:)];
|
408
|
+ _delegateHasBeforeMapZoom = [_delegate respondsToSelector:@selector(beforeMapZoom:byUser:)];
|
|
|
409
|
+ _delegateHasAfterMapZoom = [_delegate respondsToSelector:@selector(afterMapZoom:byUser:)];
|
408
|
|
410
|
|
409
|
- _delegateHasMapViewRegionDidChange = [_delegate respondsToSelector:@selector(mapViewRegionDidChange:)];
|
411
|
+ _delegateHasMapViewRegionDidChange = [_delegate respondsToSelector:@selector(mapViewRegionDidChange:byUser:)];
|
410
|
|
412
|
|
411
|
_delegateHasDoubleTapOnMap = [_delegate respondsToSelector:@selector(doubleTapOnMap:at:)];
|
413
|
_delegateHasDoubleTapOnMap = [_delegate respondsToSelector:@selector(doubleTapOnMap:at:)];
|
412
|
_delegateHasSingleTapOnMap = [_delegate respondsToSelector:@selector(singleTapOnMap:at:)];
|
414
|
_delegateHasSingleTapOnMap = [_delegate respondsToSelector:@selector(singleTapOnMap:at:)];
|
|
@@ -593,7 +595,7 @@ |
|
@@ -593,7 +595,7 @@ |
593
|
- (void)setCenterProjectedPoint:(RMProjectedPoint)centerProjectedPoint animated:(BOOL)animated
|
595
|
- (void)setCenterProjectedPoint:(RMProjectedPoint)centerProjectedPoint animated:(BOOL)animated
|
594
|
{
|
596
|
{
|
595
|
if (_delegateHasBeforeMapMove)
|
597
|
if (_delegateHasBeforeMapMove)
|
596
|
- [_delegate beforeMapMove:self];
|
598
|
+ [_delegate beforeMapMove:self byUser:_userAlteringPanOrZoom];
|
597
|
|
599
|
|
598
|
// RMLog(@"Current contentSize: {%.0f,%.0f}, zoom: %f", mapScrollView.contentSize.width, mapScrollView.contentSize.height, self.zoom);
|
600
|
// RMLog(@"Current contentSize: {%.0f,%.0f}, zoom: %f", mapScrollView.contentSize.width, mapScrollView.contentSize.height, self.zoom);
|
599
|
|
601
|
|
|
@@ -609,7 +611,7 @@ |
|
@@ -609,7 +611,7 @@ |
609
|
// RMLog(@"setMapCenterProjectedPoint: {%f,%f} -> {%.0f,%.0f}", centerProjectedPoint.x, centerProjectedPoint.y, mapScrollView.contentOffset.x, mapScrollView.contentOffset.y);
|
611
|
// RMLog(@"setMapCenterProjectedPoint: {%f,%f} -> {%.0f,%.0f}", centerProjectedPoint.x, centerProjectedPoint.y, mapScrollView.contentOffset.x, mapScrollView.contentOffset.y);
|
610
|
|
612
|
|
611
|
if (_delegateHasAfterMapMove && !animated)
|
613
|
if (_delegateHasAfterMapMove && !animated)
|
612
|
- [_delegate afterMapMove:self];
|
614
|
+ [_delegate afterMapMove:self byUser:_userAlteringPanOrZoom];
|
613
|
|
615
|
|
614
|
[self correctPositionOfAllAnnotations];
|
616
|
[self correctPositionOfAllAnnotations];
|
615
|
}
|
617
|
}
|
|
@@ -619,7 +621,7 @@ |
|
@@ -619,7 +621,7 @@ |
619
|
- (void)moveBy:(CGSize)delta
|
621
|
- (void)moveBy:(CGSize)delta
|
620
|
{
|
622
|
{
|
621
|
if (_delegateHasBeforeMapMove)
|
623
|
if (_delegateHasBeforeMapMove)
|
622
|
- [_delegate beforeMapMove:self];
|
624
|
+ [_delegate beforeMapMove:self byUser:_userAlteringPanOrZoom];
|
623
|
|
625
|
|
624
|
CGPoint contentOffset = _mapScrollView.contentOffset;
|
626
|
CGPoint contentOffset = _mapScrollView.contentOffset;
|
625
|
contentOffset.x += delta.width;
|
627
|
contentOffset.x += delta.width;
|
|
@@ -627,7 +629,7 @@ |
|
@@ -627,7 +629,7 @@ |
627
|
_mapScrollView.contentOffset = contentOffset;
|
629
|
_mapScrollView.contentOffset = contentOffset;
|
628
|
|
630
|
|
629
|
if (_delegateHasAfterMapMove)
|
631
|
if (_delegateHasAfterMapMove)
|
630
|
- [_delegate afterMapMove:self];
|
632
|
+ [_delegate afterMapMove:self byUser:_userAlteringPanOrZoom];
|
631
|
}
|
633
|
}
|
632
|
|
634
|
|
633
|
#pragma mark -
|
635
|
#pragma mark -
|
|
@@ -1079,14 +1081,19 @@ |
|
@@ -1079,14 +1081,19 @@ |
1079
|
if (self.userTrackingMode != RMUserTrackingModeNone)
|
1081
|
if (self.userTrackingMode != RMUserTrackingModeNone)
|
1080
|
self.userTrackingMode = RMUserTrackingModeNone;
|
1082
|
self.userTrackingMode = RMUserTrackingModeNone;
|
1081
|
|
1083
|
|
|
|
1084
|
+ _userAlteringPanOrZoom = YES;
|
|
|
1085
|
+
|
1082
|
if (_delegateHasBeforeMapMove)
|
1086
|
if (_delegateHasBeforeMapMove)
|
1083
|
- [_delegate beforeMapMove:self];
|
1087
|
+ [_delegate beforeMapMove:self byUser:_userAlteringPanOrZoom];
|
1084
|
}
|
1088
|
}
|
1085
|
|
1089
|
|
1086
|
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
|
1090
|
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
|
1087
|
{
|
1091
|
{
|
1088
|
if (!decelerate && _delegateHasAfterMapMove)
|
1092
|
if (!decelerate && _delegateHasAfterMapMove)
|
1089
|
- [_delegate afterMapMove:self];
|
1093
|
+ [_delegate afterMapMove:self byUser:_userAlteringPanOrZoom];
|
|
|
1094
|
+
|
|
|
1095
|
+ if (!decelerate)
|
|
|
1096
|
+ _userAlteringPanOrZoom = NO;
|
1090
|
}
|
1097
|
}
|
1091
|
|
1098
|
|
1092
|
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
|
1099
|
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
|
|
@@ -1098,21 +1105,25 @@ |
|
@@ -1098,21 +1105,25 @@ |
1098
|
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
|
1105
|
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
|
1099
|
{
|
1106
|
{
|
1100
|
if (_delegateHasAfterMapMove)
|
1107
|
if (_delegateHasAfterMapMove)
|
1101
|
- [_delegate afterMapMove:self];
|
1108
|
+ [_delegate afterMapMove:self byUser:_userAlteringPanOrZoom];
|
|
|
1109
|
+
|
|
|
1110
|
+ _userAlteringPanOrZoom = NO;
|
1102
|
}
|
1111
|
}
|
1103
|
|
1112
|
|
1104
|
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
|
1113
|
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
|
1105
|
{
|
1114
|
{
|
1106
|
if (_delegateHasAfterMapMove)
|
1115
|
if (_delegateHasAfterMapMove)
|
1107
|
- [_delegate afterMapMove:self];
|
1116
|
+ [_delegate afterMapMove:self byUser:_userAlteringPanOrZoom];
|
1108
|
}
|
1117
|
}
|
1109
|
|
1118
|
|
1110
|
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
|
1119
|
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
|
1111
|
{
|
1120
|
{
|
1112
|
_mapScrollViewIsZooming = YES;
|
1121
|
_mapScrollViewIsZooming = YES;
|
1113
|
|
1122
|
|
|
|
1123
|
+ _userAlteringPanOrZoom = (scrollView.pinchGestureRecognizer.state == UIGestureRecognizerStateBegan);
|
|
|
1124
|
+
|
1114
|
if (_delegateHasBeforeMapZoom)
|
1125
|
if (_delegateHasBeforeMapZoom)
|
1115
|
- [_delegate beforeMapZoom:self];
|
1126
|
+ [_delegate beforeMapZoom:self byUser:_userAlteringPanOrZoom];
|
1116
|
}
|
1127
|
}
|
1117
|
|
1128
|
|
1118
|
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
|
1129
|
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
|
|
@@ -1124,7 +1135,9 @@ |
|
@@ -1124,7 +1135,9 @@ |
1124
|
|
1135
|
|
1125
|
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
|
1136
|
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
|
1126
|
{
|
1137
|
{
|
1127
|
- if (self.userTrackingMode != RMUserTrackingModeNone && scrollView.pinchGestureRecognizer.state == UIGestureRecognizerStateChanged)
|
1138
|
+ _userAlteringPanOrZoom = (scrollView.pinchGestureRecognizer.state == UIGestureRecognizerStateChanged);
|
|
|
1139
|
+
|
|
|
1140
|
+ if (self.userTrackingMode != RMUserTrackingModeNone && _userAlteringPanOrZoom)
|
1128
|
self.userTrackingMode = RMUserTrackingModeNone;
|
1141
|
self.userTrackingMode = RMUserTrackingModeNone;
|
1129
|
|
1142
|
|
1130
|
[self correctPositionOfAllAnnotations];
|
1143
|
[self correctPositionOfAllAnnotations];
|
|
@@ -1133,7 +1146,7 @@ |
|
@@ -1133,7 +1146,7 @@ |
1133
|
self.userTrackingMode = RMUserTrackingModeFollow;
|
1146
|
self.userTrackingMode = RMUserTrackingModeFollow;
|
1134
|
|
1147
|
|
1135
|
if (_delegateHasAfterMapZoom)
|
1148
|
if (_delegateHasAfterMapZoom)
|
1136
|
- [_delegate afterMapZoom:self];
|
1149
|
+ [_delegate afterMapZoom:self byUser:_userAlteringPanOrZoom];
|
1137
|
}
|
1150
|
}
|
1138
|
|
1151
|
|
1139
|
// Detect dragging/zooming
|
1152
|
// Detect dragging/zooming
|
|
@@ -1272,7 +1285,7 @@ |
|
@@ -1272,7 +1285,7 @@ |
1272
|
|
1285
|
|
1273
|
// Don't do anything stupid here or your scrolling experience will suck
|
1286
|
// Don't do anything stupid here or your scrolling experience will suck
|
1274
|
if (_delegateHasMapViewRegionDidChange)
|
1287
|
if (_delegateHasMapViewRegionDidChange)
|
1275
|
- [_delegate mapViewRegionDidChange:self];
|
1288
|
+ [_delegate mapViewRegionDidChange:self byUser:_userAlteringPanOrZoom];
|
1276
|
}
|
1289
|
}
|
1277
|
|
1290
|
|
1278
|
#pragma mark - Gesture Recognizers and event handling
|
1291
|
#pragma mark - Gesture Recognizers and event handling
|