diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm index aa9af82fd..a88cb9acd 100644 --- a/platform/ios/src/MGLMapView.mm +++ b/platform/ios/src/MGLMapView.mm @@ -3738,6 +3738,13 @@ mbgl::Duration MGLDurationInSeconds(NSTimeInterval duration) duration = MAX([newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp], MGLUserLocationAnimationDuration); } [self updateUserLocationAnnotationViewAnimatedWithDuration:duration]; + + if (self.userTrackingMode == MGLUserTrackingModeNone && + self.userLocationAnnotationView.accessibilityElementIsFocused && + [UIApplication sharedApplication].applicationState == UIApplicationStateActive) + { + UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self.userLocationAnnotationView); + } } - (void)didUpdateLocationWithUserTrackingAnimated:(BOOL)animated @@ -4109,7 +4116,10 @@ mbgl::Duration MGLDurationInSeconds(NSTimeInterval duration) if ( ! [self isSuppressingChangeDelimiters] && [self.delegate respondsToSelector:@selector(mapView:regionDidChangeAnimated:)]) { - UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); + if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) + { + UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); + } BOOL animated = change == mbgl::MapChangeRegionDidChangeAnimated; [self.delegate mapView:self regionDidChangeAnimated:animated]; } @@ -4257,8 +4267,6 @@ mbgl::Duration MGLDurationInSeconds(NSTimeInterval duration) [self deselectAnnotation:self.selectedAnnotation animated:YES]; } } - - UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); } /// Intended center point of the user location annotation view with respect to diff --git a/platform/ios/src/MGLUserLocationAnnotationView.m b/platform/ios/src/MGLUserLocationAnnotationView.m index 72045f05e..c514026e4 100644 --- a/platform/ios/src/MGLUserLocationAnnotationView.m +++ b/platform/ios/src/MGLUserLocationAnnotationView.m @@ -57,7 +57,7 @@ const CGFloat MGLUserLocationAnnotationArrowSize = MGLUserLocationAnnotationPuck self.annotation = [[MGLUserLocation alloc] initWithMapView:mapView]; _mapView = mapView; [self setupLayers]; - self.accessibilityTraits = UIAccessibilityTraitButton | UIAccessibilityTraitAdjustable; + self.accessibilityTraits = UIAccessibilityTraitButton | UIAccessibilityTraitAdjustable | UIAccessibilityTraitUpdatesFrequently; _accessibilityCoordinateFormatter = [[MGLCoordinateFormatter alloc] init]; _accessibilityCoordinateFormatter.unitStyle = NSFormattingUnitStyleLong; @@ -117,6 +117,16 @@ const CGFloat MGLUserLocationAnnotationArrowSize = MGLUserLocationAnnotationPuck [self.mapView accessibilityDecrement]; } +- (void)setHidden:(BOOL)hidden +{ + BOOL oldValue = super.hidden; + [super setHidden:hidden]; + if (oldValue != hidden) + { + UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); + } +} + - (void)setTintColor:(UIColor *)tintColor { if (_puckModeActivated)