diff --git a/include/mbgl/ios/MGLMapView.h b/include/mbgl/ios/MGLMapView.h index 212a4398397..913d4976312 100644 --- a/include/mbgl/ios/MGLMapView.h +++ b/include/mbgl/ios/MGLMapView.h @@ -151,6 +151,13 @@ IB_DESIGNABLE * @param animated Specify `YES` to animate the change by smoothly scrolling and zooming or `NO` to immediately display the given bounds. */ - (void)setVisibleCoordinates:(CLLocationCoordinate2D *)coordinates count:(NSUInteger)count edgePadding:(UIEdgeInsets)insets animated:(BOOL)animated; +/** Sets the visible region so that the map displays the specified annotations. +* +* Calling this method updates the value in the visibleCoordinateBounds property and potentially other properties to reflect the new map region. +* @param annotations The annotations that you want to be visible in the map. +* @param animated `YES` if you want the map region change to be animated, or `NO` if you want the map to display the new region immediately without animations. */ +- (void)showAnnotations:(NS_ARRAY_OF(id ) *)annotations animated:(BOOL)animated; + /** The heading of the map (measured in degrees) relative to true north. * * The value `0` means that the top edge of the map view corresponds to true north. The value `90` means the top of the map is pointing due east. The value `180` means the top of the map points due south, and so on. */ diff --git a/platform/ios/MGLMapView.mm b/platform/ios/MGLMapView.mm index 8950663551b..edb3d74a3f4 100644 --- a/platform/ios/MGLMapView.mm +++ b/platform/ios/MGLMapView.mm @@ -2151,6 +2151,29 @@ - (void)deselectAnnotation:(id )annotation animated:(BOOL)animate } } +- (void)showAnnotations:(NS_ARRAY_OF(id ) *)annotations animated:(BOOL)animated +{ + if ( ! annotations || ! annotations.count) return; + + mbgl::LatLngBounds bounds; + + for (id annotation in annotations) + { + if ([annotation conformsToProtocol:@protocol(MGLOverlay)]) + { + bounds.extend(MGLLatLngBoundsFromCoordinateBounds(((id )annotation).overlayBounds)); + } + else + { + bounds.extend(MGLLatLngFromLocationCoordinate2D(annotation.coordinate)); + } + } + + [self setVisibleCoordinateBounds:MGLCoordinateBoundsFromLatLngBounds(bounds) + edgePadding:UIEdgeInsetsMake(100, 100, 100, 100) + animated:animated]; +} + #pragma mark - User Location - - (void)setShowsUserLocation:(BOOL)showsUserLocation