[ios] Fix heading update loop

Updating CLLocationManager.headingOrientation triggers a new heading update, even if there was no actual change in its value.
This commit is contained in:
Jason Wray
2017-08-23 16:06:12 -04:00
parent acb8199d32
commit b2fd7b680c
2 changed files with 18 additions and 5 deletions

View File

@@ -2,7 +2,11 @@
Mapbox welcomes participation and contributions from everyone. Please read [CONTRIBUTING.md](../../CONTRIBUTING.md) to get started.
## 3.6.2
## 3.6.3
* Fixed an issue where user heading tracking mode would update too frequently. ([#9845](https://github.com/mapbox/mapbox-gl-native/pull/9845))
## 3.6.2 - August 18, 2017
* Added an `MGLStyle.localizesLabels` property, off by default, that localizes any Mapbox Streets–sourced symbol layer into the user’s preferred language. ([#9582](https://github.com/mapbox/mapbox-gl-native/pull/9582))
* Added an additional camera method to MGLMapView that accepts an edge padding parameter. ([#9651](https://github.com/mapbox/mapbox-gl-native/pull/9651))

View File

@@ -4690,30 +4690,39 @@ public:
{
// note that right/left device and interface orientations are opposites (see UIApplication.h)
//
CLDeviceOrientation orientation;
switch ([[UIApplication sharedApplication] statusBarOrientation])
{
case (UIInterfaceOrientationLandscapeLeft):
{
self.locationManager.headingOrientation = CLDeviceOrientationLandscapeRight;
orientation = CLDeviceOrientationLandscapeRight;
break;
}
case (UIInterfaceOrientationLandscapeRight):
{
self.locationManager.headingOrientation = CLDeviceOrientationLandscapeLeft;
orientation = CLDeviceOrientationLandscapeLeft;
break;
}
case (UIInterfaceOrientationPortraitUpsideDown):
{
self.locationManager.headingOrientation = CLDeviceOrientationPortraitUpsideDown;
orientation = CLDeviceOrientationPortraitUpsideDown;
break;
}
case (UIInterfaceOrientationPortrait):
default:
{
self.locationManager.headingOrientation = CLDeviceOrientationPortrait;
orientation = CLDeviceOrientationPortrait;
break;
}
}
// Setting the location manager's heading orientation causes it to send
// a heading event, which in turn makes us redraw, which kicks off a
// loop... so don't do that. rdar://34059173
if (self.locationManager.headingOrientation != orientation)
{
self.locationManager.headingOrientation = orientation;
}
}
}