summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Wray <jason@mapbox.com>2017-08-14 15:27:07 -0400
committerJason Wray <jason@mapbox.com>2017-09-07 19:23:29 -0400
commitc35b1cd56ba8f4a3d4f195237e025bb24bfa4c43 (patch)
tree4b60dd1b04fda16bc19fbeee1b638bf2989b2207
parent5db97ed96ee1b6d5fa7b4ae6065cf5399ae1e2c0 (diff)
downloadqtlocation-mapboxgl-c35b1cd56ba8f4a3d4f195237e025bb24bfa4c43.tar.gz
[ios] Set a heading indicator update threshold
-rw-r--r--platform/ios/src/MGLFaux3DUserLocationAnnotationView.h3
-rw-r--r--platform/ios/src/MGLFaux3DUserLocationAnnotationView.m13
2 files changed, 12 insertions, 4 deletions
diff --git a/platform/ios/src/MGLFaux3DUserLocationAnnotationView.h b/platform/ios/src/MGLFaux3DUserLocationAnnotationView.h
index d5dae3a919..da5c7155a5 100644
--- a/platform/ios/src/MGLFaux3DUserLocationAnnotationView.h
+++ b/platform/ios/src/MGLFaux3DUserLocationAnnotationView.h
@@ -7,6 +7,9 @@ const CGFloat MGLUserLocationAnnotationHaloSize = 115.0;
const CGFloat MGLUserLocationAnnotationPuckSize = 45.0;
const CGFloat MGLUserLocationAnnotationArrowSize = MGLUserLocationAnnotationPuckSize * 0.6;
+// Threshold in radians between heading indicator rotation updates.
+const CGFloat MGLUserLocationHeadingUpdateThreshold = 0.01;
+
@interface MGLFaux3DUserLocationAnnotationView : MGLUserLocationAnnotationView
@end
diff --git a/platform/ios/src/MGLFaux3DUserLocationAnnotationView.m b/platform/ios/src/MGLFaux3DUserLocationAnnotationView.m
index a04ac8cd28..ee45865b0a 100644
--- a/platform/ios/src/MGLFaux3DUserLocationAnnotationView.m
+++ b/platform/ios/src/MGLFaux3DUserLocationAnnotationView.m
@@ -231,10 +231,9 @@
_headingIndicatorLayer = [[MGLUserLocationHeadingBeamLayer alloc] initWithUserLocationAnnotationView:self];
//_headingIndicatorLayer = [[MGLUserLocationHeadingArrowLayer alloc] initWithUserLocationAnnotationView:self];
[self.layer insertSublayer:_headingIndicatorLayer below:_dotBorderLayer];
-
- _oldHeadingAccuracy = headingAccuracy;
}
- else if (_oldHeadingAccuracy != headingAccuracy)
+
+ if (_oldHeadingAccuracy != headingAccuracy)
{
//[_headingIndicatorLayer updateHeadingAccuracy:headingAccuracy];
_oldHeadingAccuracy = headingAccuracy;
@@ -242,7 +241,13 @@
if (self.userLocation.heading.trueHeading >= 0)
{
- _headingIndicatorLayer.affineTransform = CGAffineTransformRotate(CGAffineTransformIdentity, -MGLRadiansFromDegrees(self.mapView.direction - self.userLocation.heading.trueHeading));
+ CGFloat rotation = -MGLRadiansFromDegrees(self.mapView.direction - self.userLocation.heading.trueHeading);
+
+ // Don't rotate if the change is imperceptible.
+ if (fabs(rotation) > MGLUserLocationHeadingUpdateThreshold)
+ {
+ _headingIndicatorLayer.affineTransform = CGAffineTransformRotate(CGAffineTransformIdentity, rotation);
+ }
}
}
else