diff options
-rw-r--r-- | platform/ios/src/MGLFaux3DUserLocationAnnotationView.h | 3 | ||||
-rw-r--r-- | platform/ios/src/MGLFaux3DUserLocationAnnotationView.m | 13 |
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 |