[ios] Fix up center coordinate after lopsided pinch gesture
The gesture recognizer only reports the gesture’s current center point, so use the previous center point to anchor the transition. Fixes #4315.
This commit is contained in:
committed by
Minh Nguyễn
parent
bbe13b8cc6
commit
b57f0fb987
@@ -72,6 +72,7 @@ Known issues:
|
||||
- Tiles and other resources are cached in the same file that holds offline resources. The combined cache file is located in a subdirectory of the user’s Application Support directory, which means iOS will not delete the file when disk space runs low. ([#4377](https://github.com/mapbox/mapbox-gl-native/pull/4377))
|
||||
- The user dot no longer disappears after panning the map across the antimeridian at low zoom levels. ([#4275](https://github.com/mapbox/mapbox-gl-native/pull/4275))
|
||||
- The map no longer recoils when panning quickly at low zoom levels. ([#4214](https://github.com/mapbox/mapbox-gl-native/pull/4214))
|
||||
- Fixed an issue causing the map to pan the wrong way when the user pinches unevenly. ([#4427](https://github.com/mapbox/mapbox-gl-native/pull/4427))
|
||||
- An icon laid out along a line no longer appears if it would extend past the end of the line. Some one-way arrows no longer point the wrong way. ([#3839](https://github.com/mapbox/mapbox-gl-native/pull/3839))
|
||||
- Fixed warping of dashed lines near sharp corners. ([#3914](https://github.com/mapbox/mapbox-gl-native/pull/3914))
|
||||
- Telemetry location gathering now occurs only when the device is in motion. ([#4115](https://github.com/mapbox/mapbox-gl-native/pull/4115))
|
||||
|
||||
@@ -211,6 +211,10 @@ public:
|
||||
|
||||
NSUInteger _changeDelimiterSuppressionDepth;
|
||||
|
||||
/// Center coordinate of the pinch gesture on the previous iteration of the gesture.
|
||||
CLLocationCoordinate2D _previousPinchCenterCoordinate;
|
||||
NSUInteger _previousPinchNumberOfTouches;
|
||||
|
||||
BOOL _delegateHasAlphasForShapeAnnotations;
|
||||
BOOL _delegateHasStrokeColorsForShapeAnnotations;
|
||||
BOOL _delegateHasFillColorsForShapeAnnotations;
|
||||
@@ -1133,6 +1137,17 @@ mbgl::Duration MGLDurationInSeconds(NSTimeInterval duration)
|
||||
if (log2(newScale) < _mbglMap->getMinZoom()) return;
|
||||
|
||||
_mbglMap->setScale(newScale, { centerPoint.x, centerPoint.y });
|
||||
|
||||
// The gesture recognizer only reports the gesture’s current center
|
||||
// point, so use the previous center point to anchor the transition.
|
||||
// If the number of touches has changed, the remembered center point is
|
||||
// meaningless.
|
||||
if (self.userTrackingMode == MGLUserTrackingModeNone && pinch.numberOfTouches == _previousPinchNumberOfTouches)
|
||||
{
|
||||
CLLocationCoordinate2D centerCoordinate = _previousPinchCenterCoordinate;
|
||||
_mbglMap->setLatLng(MGLLatLngFromLocationCoordinate2D(centerCoordinate),
|
||||
{ centerPoint.x, centerPoint.y });
|
||||
}
|
||||
|
||||
[self notifyMapChange:mbgl::MapChangeRegionIsChanging];
|
||||
}
|
||||
@@ -1176,6 +1191,9 @@ mbgl::Duration MGLDurationInSeconds(NSTimeInterval duration)
|
||||
|
||||
[self unrotateIfNeededForGesture];
|
||||
}
|
||||
|
||||
_previousPinchCenterCoordinate = [self convertPoint:[pinch locationInView:pinch.view] toCoordinateFromView:self];
|
||||
_previousPinchNumberOfTouches = pinch.numberOfTouches;
|
||||
}
|
||||
|
||||
- (void)handleRotateGesture:(UIRotationGestureRecognizer *)rotate
|
||||
|
||||
Reference in New Issue
Block a user