From 46e0bb1e8663ffbecc0b043480740187e757cab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Sat, 16 May 2015 14:48:18 -0700 Subject: [PATCH] [ios] Refactored MGLAnnotationContext MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed an issue where the “return to map” accessibility element lacked a label. Always update the title and subtitle of an annotation accessibility element, in case the title or subtitle changes from one showing to the next. --- platform/ios/src/MGLMapView.mm | 51 ++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm index a71f9242809..6d2da6b7fec 100644 --- a/platform/ios/src/MGLMapView.mm +++ b/platform/ios/src/MGLMapView.mm @@ -177,10 +177,22 @@ @interface MGLAnnotationAccessibilityElement : UIAccessibilityElement @property (nonatomic) MGLAnnotationTag tag; +- (instancetype)initWithAccessibilityContainer:(id)container tag:(MGLAnnotationTag)identifier NS_DESIGNATED_INITIALIZER; + @end @implementation MGLAnnotationAccessibilityElement +- (instancetype)initWithAccessibilityContainer:(id)container tag:(MGLAnnotationTag)tag +{ + if (self = [super initWithAccessibilityContainer:container]) + { + _tag = tag; + self.accessibilityTraits = UIAccessibilityTraitButton; + } + return self; +} + @end /// Lightweight container for metadata about an annotation, including the annotation itself. @@ -204,7 +216,7 @@ - (instancetype)initWithAccessibilityContainer:(id)container if (self = [super initWithAccessibilityContainer:container]) { self.accessibilityTraits = UIAccessibilityTraitButton; - self.accessibilityLabel = self.accessibilityLabel; + self.accessibilityLabel = [self.accessibilityContainer accessibilityLabel]; self.accessibilityHint = @"Returns to the map"; } return self; @@ -251,7 +263,7 @@ @interface MGLMapView () annotation = annotationContext.annotation; - MGLAnnotationAccessibilityElement *element = annotationContext.accessibilityElement; // Lazily create an accessibility element for the found annotation. - if ( ! element) + if ( ! annotationContext.accessibilityElement) { - element = [[MGLAnnotationAccessibilityElement alloc] initWithAccessibilityContainer:self]; - element.tag = annotationTag; - element.accessibilityTraits = UIAccessibilityTraitButton; - if ([annotation respondsToSelector:@selector(title)]) - { - element.accessibilityLabel = annotation.title; - } - if ([annotation respondsToSelector:@selector(subtitle)]) - { - element.accessibilityValue = annotation.subtitle; - } - annotationContext.accessibilityElement = element; + annotationContext.accessibilityElement = [[MGLAnnotationAccessibilityElement alloc] initWithAccessibilityContainer:self tag:annotationTag]; } - // Update the accessibility element’s frame. + // Update the accessibility element. MGLAnnotationImage *annotationImage = [self imageOfAnnotationWithTag:annotationTag]; CGRect annotationFrame = [self frameOfImage:annotationImage.image centeredAtCoordinate:annotation.coordinate]; CGRect screenRect = UIAccessibilityConvertFrameToScreenCoordinates(annotationFrame, self); - element.accessibilityFrame = screenRect; + annotationContext.accessibilityElement.accessibilityFrame = screenRect; + + if ([annotation respondsToSelector:@selector(title)]) + { + annotationContext.accessibilityElement.accessibilityLabel = annotation.title; + } + if ([annotation respondsToSelector:@selector(subtitle)]) + { + annotationContext.accessibilityElement.accessibilityValue = annotation.subtitle; + } - return element; + return annotationContext.accessibilityElement; } - (NSInteger)indexOfAccessibilityElement:(id)element @@ -1986,11 +1995,11 @@ - (NSInteger)indexOfAccessibilityElement:(id)element else return std::distance(visibleAnnotations.begin(), foundElement) + 2 /* compass, userLocationAnnotationView */; } -- (UIAccessibilityElement *)mapViewProxyAccessibilityElement +- (MGLMapViewProxyAccessibilityElement *)mapViewProxyAccessibilityElement { if ( ! _mapViewProxyAccessibilityElement) { - _mapViewProxyAccessibilityElement = [[MGLAnnotationAccessibilityElement alloc] initWithAccessibilityContainer:self]; + _mapViewProxyAccessibilityElement = [[MGLMapViewProxyAccessibilityElement alloc] initWithAccessibilityContainer:self]; } return _mapViewProxyAccessibilityElement; }