mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-25 21:05:40 +08:00
Added ability to use a custom view for MapView annotations
Summary: public This diff adds the ability to specify a custom React component (aka view) to be displayed as a MapView pin. This makes it possible to use remote images (using an <Image/> component), or text (using a <Text/> component), or anything else. One consequence of this is that MapView can no longer support arbitrary subviews. To place views in front the map, add them to a separate container view. Reviewed By: tadeuzagallo Differential Revision: D2764790 fb-gh-sync-id: e16b44e866c2d76c76b0cb35ef9eefbfc68d6719
This commit is contained in:
committed by
facebook-github-bot-6
parent
97c75cf5a4
commit
f9dfb90a35
@@ -23,6 +23,7 @@ const CGFloat RCTMapZoomBoundBuffer = 0.01;
|
||||
{
|
||||
UIView *_legalLabel;
|
||||
CLLocationManager *_locationManager;
|
||||
NSMutableArray<UIView *> *_reactSubviews;
|
||||
}
|
||||
|
||||
- (instancetype)init
|
||||
@@ -30,6 +31,7 @@ const CGFloat RCTMapZoomBoundBuffer = 0.01;
|
||||
if ((self = [super init])) {
|
||||
|
||||
_hasStartedRendering = NO;
|
||||
_reactSubviews = [NSMutableArray new];
|
||||
|
||||
// Find Apple link label
|
||||
for (UIView *subview in self.subviews) {
|
||||
@@ -49,6 +51,21 @@ const CGFloat RCTMapZoomBoundBuffer = 0.01;
|
||||
[_regionChangeObserveTimer invalidate];
|
||||
}
|
||||
|
||||
- (void)insertReactSubview:(UIView *)subview atIndex:(NSInteger)atIndex
|
||||
{
|
||||
[_reactSubviews insertObject:subview atIndex:atIndex];
|
||||
}
|
||||
|
||||
- (void)removeReactSubview:(UIView *)subview
|
||||
{
|
||||
[_reactSubviews removeObject:subview];
|
||||
}
|
||||
|
||||
- (NSArray<UIView *> *)reactSubviews
|
||||
{
|
||||
return _reactSubviews;
|
||||
}
|
||||
|
||||
- (void)layoutSubviews
|
||||
{
|
||||
[super layoutSubviews];
|
||||
@@ -111,7 +128,7 @@ const CGFloat RCTMapZoomBoundBuffer = 0.01;
|
||||
|
||||
// TODO: this doesn't preserve order. Should it? If so we should change the
|
||||
// algorithm. If not, it would be more efficient to use an NSSet
|
||||
- (void)setAnnotations:(RCTMapAnnotationArray *)annotations
|
||||
- (void)setAnnotations:(NSArray<RCTMapAnnotation *> *)annotations
|
||||
{
|
||||
NSMutableArray<NSString *> *newAnnotationIDs = [NSMutableArray new];
|
||||
NSMutableArray<RCTMapAnnotation *> *annotationsToDelete = [NSMutableArray new];
|
||||
@@ -154,7 +171,7 @@ const CGFloat RCTMapZoomBoundBuffer = 0.01;
|
||||
|
||||
// TODO: this doesn't preserve order. Should it? If so we should change the
|
||||
// algorithm. If not, it would be more efficient to use an NSSet
|
||||
- (void)setOverlays:(RCTMapOverlayArray *)overlays
|
||||
- (void)setOverlays:(NSArray<RCTMapOverlay *> *)overlays
|
||||
{
|
||||
NSMutableArray *newOverlayIDs = [NSMutableArray new];
|
||||
NSMutableArray *overlaysToDelete = [NSMutableArray new];
|
||||
|
||||
Reference in New Issue
Block a user