From 9dd9bd6e9ddf40ae3ae1746b191ce7d0a8ea0842 Mon Sep 17 00:00:00 2001 From: "Justin R. Miller" Date: Sun, 22 Mar 2015 12:14:20 -0700 Subject: [PATCH] bring in tweaked compass snapping fixes from @friedbunny --- platform/ios/MGLMapView.mm | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/platform/ios/MGLMapView.mm b/platform/ios/MGLMapView.mm index 8593e9da5..96ae0b5c2 100644 --- a/platform/ios/MGLMapView.mm +++ b/platform/ios/MGLMapView.mm @@ -703,6 +703,8 @@ mbgl::DefaultFileSource *mbglFileSource = nullptr; [self unrotateIfNeededAnimated:YES]; + [self snapCompassIfNeeded]; + [self notifyMapChange:@(mbgl::MapChangeRegionDidChangeAnimated)]; } } @@ -1710,7 +1712,7 @@ CLLocationCoordinate2D latLngToCoordinate(mbgl::LatLng latLng) return (self.zoomLevel > 3); } -// correct rotations to north as needed +// correct rotations to north as needed at low zooms // - (void)unrotateIfNeededAnimated:(BOOL)animated { @@ -1884,6 +1886,22 @@ CLLocationCoordinate2D latLngToCoordinate(mbgl::LatLng latLng) } } +// reset north on very small gesture-induced angles +// +- (void)snapCompassIfNeeded +{ + double degrees = mbglMap->getBearing() * -1; + while (degrees >= 360) degrees -= 360; + while (degrees < 0) degrees += 360; + + double tolerance = 7; + + if (self.compass.alpha > 0 && (degrees < tolerance || degrees > 360 - tolerance)) + { + [self resetNorthAnimated:YES]; + } +} + + (UIImage *)resourceImageNamed:(NSString *)imageName { if ( ! [[imageName pathExtension] length])